thc*_*ark 2 c++ type-conversion eigen tensor
使用Eigen不支持的Tensor模块,如果我这样做:
size_t dim0 = 3;
size_t dim1 = 2;
size_t dim2 = 4;
Eigen::Tensor<double, 3> var(dim0, dim1, dim2);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
/usr/local/include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h:287:167: error: non-constant-expression cannot be narrowed from type 'unsigned long' to 'std::__1::array<long, 3>::value_type' (aka 'long') in initializer list [-Wc++11-narrowing]
Run Code Online (Sandbox Code Playgroud)
但是如果我明确地将维度转换为long int,那么代码编译好了:
long int dim0 = 3;
long int dim1 = 2;
long int dim2 = 4;
Eigen::Tensor<double, 3> var(dim0, dim1, dim2);
Run Code Online (Sandbox Code Playgroud)
问题:
(size_t)类型作为维度参数?我应该为此提交错误报告还是这里的预期行为?我正在使用C++ 11,在Mac OSX上使用clang(尚未测试其他平台).
对于任何无法转换为long无损失的类型,都会出现缩小警告.这意味着size_t,但也在long long某些平台上.
通常,循环索引应该被签名,因此特征决定存储long大小.
有关这方面的更多信息,有一些cppcon主题(主要是Chandler Carruth)关于帮助编译器的未定义行为.