警告绑定到临时值的 clang 是否正确
Is clang correct to warn of a binding to a temporary value?
在此代码中,clang 警告v
将被绑定到一个临时值。我希望它绑定到函数外部定义的变量之一。叮当对吗?
std::vector<int> a, b, c;
void foo()
{
static auto const& v = [](){ /* logic to return a or b or c */ }();
}
是的,您正在将临时绑定到那里的引用。lambda 返回所选向量的副本,而不是对它的引用。
如果你在第一次调用foo之后尝试改变绑定向量,你可以看到这种情况:
void foo()
{
static auto const& v = [](){ return a; }();
std::cout << v.size() << 'n';
}
...
foo();
a.push_back(1);
foo();
a.push_back(2);
将打印
1
1
在科里鲁上看到它
只是做
static auto const& v = []() -> auto& { /* logic to return a or b or c */ }();
相反,你很好。
相关文章:
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 是否可以将 Clang-Tidy 与 QNX 一起使用?
- clang++ 是否以更轻松的方式处理系统标头?
- Clang 是否可以在使用可见性属性时生成导入库(不带 __declspec(dllexport))?
- 是否有 g++ 或 clang++ 调试选项来指导可变参数模板化
- 在 clang 和 gcc 中是否有视觉C++ __declspec(属性声明属性)的替代方案?
- 在这种情况下,GCC 和 clang 是否显示与 Visual Studio 相同的结果,关于语言链接?
- 是否可以使用G 或Clang -OpenMP获得矢量化报告
- clang 拒绝具有尾随 decltype 返回类型的模板调用是否正确,具体取决于其重载之一?
- 是否可以仅在Windows上使用Clang编译C ++
- GCC 或 Clang 关于函数参数在其自己的默认参数中的范围内的名称是否正确?
- 英特尔C++编译器 (19.0) 现在是否仅使用 Clang 前端(即已经放弃的 EDG)?
- clang++ 是否忽略了某些弃用警告的外部"C"?
- 如果对象在同一层次结构中,-Wreturn-std-move clang 警告是否正确
- 警告绑定到临时值的 clang 是否正确
- clang++ 是否支持__restrict
- gcc/clang是否可以为不同的c++版本设置库位置?
- clang++是否对局部静态变量进行线程安全初始化?
- clang是否已经支持c++ 11 ?
- Clang是否可以输出将double转换为float的警告