【发布时间】:2016-10-27 08:06:16
【问题描述】:
为什么width 在第一次实例化后不保留其constness?
template<typename T, const std::size_t N>
class ProjectionTest
{
std::array<T, N*N> _arr;
public:
ProjectionTest() : width(N)
{ }
const std::size_t width = 0;
};
ProjectionTest<int, 9> test;
ProjectionTest<int, test.width> test2;
它给出了错误: 错误 C2975“N”:“ProjectionTest”的模板参数无效,预期的编译时常量表达式
【问题讨论】:
-
为此使用
constexpr。或static const -
我试过 constexpr,它给出了错误 C2126 'ProjectionTest
::width' 不能用 'constexpr' 说明符声明。没有尝试静态常量,但它给出了错误 C2438 'width': cannot initialize static class data via constructor -
错误,它必须是
static constexpr。你定义的是一个非静态成员,