gpt4 book ai didi

c++ - const 模板参数在创建后不保留 const-ness

转载 作者:行者123 更新时间:2023-11-30 01:42:01 24 4
gpt4 key购买 nike

为什么 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”的无效模板参数,预期的编译时常量表达式

最佳答案

非静态成员 width 是常量,但不是编译时常量,模板参数需要它。

您可以使用constexpr(必须是静态成员),例如

template<typename T, const std::size_t N>
class ProjectionTest
{
std::array<T, N*N> _arr;
public:
ProjectionTest()
{ }

constexpr static std::size_t width = N;

};

然后

ProjectionTest<int, test.width> test2;

LIVE with VC

关于c++ - const 模板参数在创建后不保留 const-ness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com