grz*_*zkv 24 c++ scope for-loop initializer variable-declaration
为什么这个C++代码不能在VS2010下编译:
for ( int a = 0, short b = 0; a < 10; ++a, ++b ) {}
Run Code Online (Sandbox Code Playgroud)
虽然这个做了:
short b = 0;
for ( int a = 0; a < 10; ++a, ++b ) {}
Run Code Online (Sandbox Code Playgroud)
是否禁止在for-loop初始化程序中声明两个不同类型的变量?如果是这样,你怎么解决它?
Joh*_*itb 43
是的,这是禁止的.同样,你不能在一个声明语句中声明不同类型的变量(编辑:模块化@MrLister提到的声明符修饰符).你可以声明结构
for (struct { int a = 0; short b = 0; } d; d.a < 10; ++d.a, ++d.b ) {}
Run Code Online (Sandbox Code Playgroud)
C++ 03代码:
for (struct { int a; short b; } d = { 0, 0 }; d.a < 10; ++d.a, ++d.b ) {}
Run Code Online (Sandbox Code Playgroud)
当然,当一切都是0,你可以完全省略初始化器并写入= { }.
Mr *_*ter 10
与for循环无关.如果你int a = 0, short b = 0;在任何循环之外写,这也不会编译.
所以答案是:在单个语句中始终禁止声明两个不同类型的变量.
编辑:哦,对于迂腐,我确实意识到你可以在同一个语句中声明一个基类型和一个指针类型,例如一个int和一个int指针,所以那些将是不同的类型,是的.
嗯,这让我觉得.在32位环境中,指针将是4个字节,就像int一样,所以你可以使用short a = 0,*b = 0; 然后将b转换为int.嗯...
| 归档时间: |
|
| 查看次数: |
5150 次 |
| 最近记录: |