传递const变量时编译器返回错误:template参数不是常量表达式

时间:2017-08-05 08:19:09

标签: c++ const bitset std-bitset

所以我写了这段代码 - >

#include <iostream>
#include <bitset>

int main(){

    int num, temp, digits = 0;
    std::cin >> num;
    temp = num;

    while(temp){
        temp /= 10;
        ++digits;
    }

    const int size = digits;

    std::bitset<size> a(num);
    std::cout << a << std::endl;

    return 0;
}

bitset容器不接受const整数大小作为参数并抛出错误 - Non-type template argument is not a constant expression。我想知道为什么会发生这种情况,因为大小已被声明为常量,并且它的值在我的程序运行期间不会改变?

1 个答案:

答案 0 :(得分:4)

InitializeComponent()变量的解释方式可能不同,具体取决于分配给它的内容。

  1. 当分配编译时常量时:它将是编译时常量。这意味着在编译期间,常量值可以直接用于原位。

  2. 从另一个变量(不是编译时常量)分配时:新变量是不可修改的。从这个意义上讲,变量不是编译时常量。它不能在该代码块中修改。

  3. 模板需要编译时常量。