关于for循环的初始化表达式,如何初始化两个(或多个)不同类型的变量?

tianyafengxinzi 2012-07-25 04:52:47
如题,可能有些拗口,举个例子吧:

int ia[] = {1,2,3,4};
for(int *p = ia,size_t size = sizeof(ia)/sizeof(ia[0]); p != ia + size; p++)
{
cout<<*p<<endl;
}

上述代码会报错,去掉size_t就成功了。当然了,此处让size成为int型也的确没什么糟糕的。可是如果不巧的是,我这里需要的是初始化一个double呢?或string呢?是的,可以把这些初始化放到for的上面,可是有时觉得如果是一次性的变量,我希望它可以是for的局部变量,以避免浪费一些最佳变量名(额,好吧,我承认我强词夺理了^^),或者能让代码更优雅点吧?
拜求解决方案。
...全文
2974 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
赵4老师 2012-07-27
引用 3 楼 的回复:
无解.想局部性吗,加对大括号?
int ia[] = {1,2,3,4};
{
int *p = ia,size_t size = sizeof(ia)/sizeof(ia[0]);
for(;p != ia + size; p++)
{
cout<<*p<<endl;
}
}
  • 打赏
  • 举报
回复
shen_wei 2012-07-25
[Quote=引用 3 楼 的回复:]
无解.想局部性吗,加对大括号?
int ia[] = {1,2,3,4};
{
int *p = ia,size_t size = sizeof(ia)/sizeof(ia[0]);
for(p != ia + size; p++)
{
cout<<*p<<endl;
}
}
[/Quote]

还是这个简单些。。
  • 打赏
  • 举报
回复
中才德创 2012-07-25
[Quote=引用 2 楼 的回复:]
我的叙述中已经表明这种方式排除在外,所以这样的回复是没有任何价值的……
[/Quote]楼主有此困惑,正常心理。不过,for的第一个分号前初始化变量,确实不支持你要的那种。

大约是for的语法限定了的吧!

变通的方案,恐怕就是用{}吧。它是有你想要的那个作用域效果的!
  • 打赏
  • 举报
回复
图灵狗 2012-07-25
不同类型的没法放在for循环中一起初始化,可以变通一下:

{size_t size = sizeof(ia) / sizeof(ia[0]);
for(int *p = ia; p != ia + size; p++)
{
cout << *p << endl;
}}
  • 打赏
  • 举报
回复
赵4老师 2012-07-25
int ia[] = {1,2,3,4};
for(int *p = ia; ; p++)
{
size_t size;
if (p==ia) size = sizeof(ia)/sizeof(ia[0]);
if (p == ia + size) break;
cout<<*p<<endl;
}


  • 打赏
  • 举报
回复
就算能写,一大串初始化写一行,看起来很是困难啊。
还不如在for外面加上{},即限定作用域又容易看清楚。
  • 打赏
  • 举报
回复
evencoming 2012-07-25
无解.想局部性吗,加对大括号?
int ia[] = {1,2,3,4};
{
int *p = ia,size_t size = sizeof(ia)/sizeof(ia[0]);
for(p != ia + size; p++)
{
cout<<*p<<endl;
}
}
  • 打赏
  • 举报
回复
tianyafengxinzi 2012-07-25
[Quote=引用 1 楼 的回复:]
在for循环外初始化
[/Quote]
我的叙述中已经表明这种方式排除在外,所以这样的回复是没有任何价值的……
  • 打赏
  • 举报
回复
ouyh12345 2012-07-25
在for循环外初始化
  • 打赏
  • 举报
回复
发帖
C++ 语言

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2012-07-25 04:52
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下