dar*_*une 12 c++ for-loop initializer-list c++17
以下内容无法编译:
#include <iostream>
int main()
{
int a{},b{},c{},d{};
for (auto& s : {a, b, c, d}) {
s = 1;
}
std::cout << a << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器错误是: error: assignment of read-only reference 's'
现在,在我的实际情况中,列表由类中的成员变量组成。
现在,这不起作用,因为表达式变为initializer_list<int>实际上复制a,b,c和d的a,因此也不允许修改。
我的问题有两个:
不允许以这种方式编写基于范围的for循环背后有动机吗? 例如。也许会有一些特殊的情况来表达裸括号。
修复此类循环的语法整洁方法是什么?
最好遵循以下方式:
for (auto& s : something(a, b, c, d)) {
s = 1;
}
Run Code Online (Sandbox Code Playgroud)
我认为指针间接寻址不是一个好的解决方案(即{&a, &b, &c, &d})-在取消迭代器时,任何解决方案都应直接给元素提供引用。
范围并不像人们想象的那么神奇。最后,必须有一个对象,编译器可以生成对成员函数或自由函数的调用begin()以及end().
您可能能够到达的最接近的是:
#include <iostream>
int main()
{
int a{},b{},c{},d{};
for (auto s : {&a, &b, &c, &d} ) {
*s = 1;
}
std::cout << a << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |