我可以有
std::bitset< 10 > bitsetA;
Run Code Online (Sandbox Code Playgroud)
要么
const size_t LengthB = 20;
std::bitset< LengthB > bitsetB;
Run Code Online (Sandbox Code Playgroud)
没有任何问题.
但是,如果长度不是 const
size_t LengthC = 30;
std::bitset< LengthC > bitsetC; // Line 30, say
Run Code Online (Sandbox Code Playgroud)
我面临以下编译错误
'LengthC' cannot appear in a constant-expression
template argument 1 is invalid
Run Code Online (Sandbox Code Playgroud)
这是什么原因?
对于编译器和用户代码,如果要接受第30行,会出现什么问题?是因为LengthC可能有一些别名吗?
模板根据模板参数实例化新类型,这在编译时完成.您无法在运行时实例化新类型,因为C++是静态类型的.
所以当你有一个非const变量时,它不能作为模板参数传递,因为它不能保证是那个值(你必须"在运行时"实例化一个新类型).只有当它是const时,才能确保该值确实是常量,因此可用于模板参数.
| 归档时间: |
|
| 查看次数: |
1204 次 |
| 最近记录: |