假设有一个这样的循环:
\n\nfor(size_t i=0, n=ar.size(); i<n; ++i)\n{\n // ...\n}\nRun Code Online (Sandbox Code Playgroud)\n\n是否可以将其重写为:
\n\nfor(auto i=0, n=ar.size(); i<n; ++i)\n{\n // ...\n}\nRun Code Online (Sandbox Code Playgroud)\n\n换句话说,这两个变量将i始终n是相同的数据类型。
当我尝试这样的事情时:
\n\nauto i=0, s="";\nRun Code Online (Sandbox Code Playgroud)\n\ng++ 4.8.4 生成错误inconsistent deduction for \xe2\x80\x98auto\xe2\x80\x99: \xe2\x80\x98int\xe2\x80\x99 and then \xe2\x80\x98const char*\xe2\x80\x99。但我无法确定它是否只是 g++,或者根据标准实际上需要使用类型推导中的每个值。
这是 [dcl.spec.auto, 7.1.6.4]/8:
如果init-declarator-list包含多个init-declarator,则它们都应构成变量声明。每个声明变量的类型按照上面的描述确定,如果每次推导中替换占位符类型的类型不相同,则程序是格式错误的。
也就是说,所有推导类型必须相同。
同一段中甚至还有一个例子:
auto x = 5, *y = &x; // OK: auto is int
auto a = 5, b = { 1, 2 }; // error: different types for auto
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |