bod*_*ydo 31 c loops for-loop initialization
我以为可以在for
循环中初始化几个变量:
for (int i = 0, char* ptr = bam; i < 10; i++) { ... }
Run Code Online (Sandbox Code Playgroud)
但我发现这是不可能的.GCC给出以下错误:
错误:'char'之前的预期unqualified-id
你是否真的无法在for
循环中初始化不同类型的变量?
Pot*_*ter 46
您可以(但通常不应该)使用本地结构类型.
for ( struct { int i; char* ptr; } loopy = { 0, bam };
loopy.i < 10 && * loopy.ptr != 0;
++ loopy.i, ++ loopy.ptr )
{ ... }
Run Code Online (Sandbox Code Playgroud)
从C++ 11开始,只要不依赖于局部变量,就可以更优雅地初始化各个部分:
for ( struct { int i = 0; std::string status; } loop;
loop.status != "done"; ++ loop.i )
{ ... }
Run Code Online (Sandbox Code Playgroud)
这几乎可读得足以真正使用.
C++ 17计划用于解决结构化绑定的问题:
for ( auto [ i, status ] = { 0, ""s }; status != "done"; ++ i )
Run Code Online (Sandbox Code Playgroud)
但是,详细的功能集和语法仍在不断变化.
Mat*_*hen 18
确实,您无法同时声明和初始化不同类型的声明符.但这并不是特定于for循环.如果您这样做,您将收到错误:
int i = 0, char *ptr = bam;
Run Code Online (Sandbox Code Playgroud)
太.for循环的第一个子句可以是(C99§6.8.5.3)"声明"或"void表达式".请注意,您可以这样做:
int i = 0, *j = NULL;
for(int i = 0, *j = NULL;;){}
Run Code Online (Sandbox Code Playgroud)
因为i
并且*j
都是类型int
.声明的确切语法在§6.7中给出
Axe*_*ing 13
如果你真的需要变量保留在你可以编写的循环范围内
{ char* ptr = bam; for (int i = 0; i < 10; i++) { ... } }
Run Code Online (Sandbox Code Playgroud)
这有点难看,但有效.
试试这个:
int i;
char* ptr;
for (i = 0, ptr = bam; i < 10; i++) { ... }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
43402 次 |
最近记录: |