我有一个简单的用法来遍历std::valarray
范围 for 循环中的临时表达式,但得到error
:无效范围表达式...
主文件
#include <iostream>
#include <valarray>
int main()
{
std::valarray<int> xxx {2,7,1,8,2,8};
std::valarray<int> zzz {xxx};
for (auto x : xxx + zzz) std::cout << x << std::endl;
return 0;
}
clang++ main.cpp -std=c++11
main.cpp:10:17: error: invalid range expression of type 'std::__1::__val_expr<std::__1::_BinaryOp<std::__1::plus<int>, std::__1::valarray<int>, std::__1::valarray<int> > >'; no viable 'begin' function available
for (auto x : xxx + zzz) std::cout << x << std::endl;
^ ~~~
它没有按我预期的那样编译真的有充分的理由吗?
重载的返回类型operator+
是valarray<T>
,所以理论上,表达式的值应该是 type 的临时实例valarray<T>
。
概要:
template<class T> valarray<T> operator+ (const valarray<T>& x, const valarray<T>& y);
版本: Apple LLVM 版本 8.0.0 (clang-800.0.38) 目标:x86_64-apple-darwin15.6.0
注意以下线路工作
for (auto x : xxx += zzz) std::cout << x << std::end;