c++11 - 基于范围的for循环引用
问题描述
这个问题是出于好奇,而不是必要。我发现 C++11 的基于范围的 for 循环有用的一种方法是迭代离散对象:
#include <iostream>
#include <functional>
int main()
{
int a = 1;
int b = 2;
int c = 3;
// handy:
for (const int& n : {a, b, c}) {
std::cout << n << '\n';
}
我也希望能够使用相同的循环样式来修改非常量引用,但我相信标准不允许这样做(请参阅为什么引用数组是非法的?):
// would be handy but not allowed:
// for (int& n : {a, b, c}) {
// n = 0;
// }
我想到了两种解决方法,但它们似乎会产生一些额外的小成本,而且它们看起来并不那么干净:
// meh:
for (int* n : {&a, &b, &c}) {
*n = 0;
}
// meh:
using intRef = std::reference_wrapper<int>;
for (int& n : {intRef (a), intRef (b), intRef (c)}) {
n = 0;
}
}
所以问题是,有没有更清洁或更好的方法?对此可能没有答案,但我总是对人们在 stackoverflow 上的聪明想法印象深刻,所以我想我会问。
解决方案
与其自己构建一个reference_wrapper
你可以使用std::ref
的,那就是你能得到的:
using std::ref;
for (int& n : {ref(a), ref(b), ref(c)}) {
n = 0;
}
推荐阅读
- javascript - 此代码片段中的“模型”类的意图是什么?
- git - 如何提交 Git 钩子?
- python - 我无法通过“列表索引超出范围”错误消息
- xamarin.forms - 如何在 mmvmcross 中将值转换器与 rio 绑定结合使用?
- python - 如何在异常中中断交互模式以调试 Python 脚本?
- python - 如何在我的 pyspark 代码中对表字段进行排序
- c# - 单元测试 Umbraco 8 Composers
- python - Beam:ReadAllFromText 接收来自 DoFn 不同行为的字符串或列表?
- python - 无法找到从 txt 文件在 python 2.7 中构建 json 的逻辑
- javascript - 在渲染道具功能中管理本地状态