C ++:将非常量转换为常量

时间:2016-11-20 17:47:38

标签: c++ variables scope constants

我想将非常量变量转换为常量变量。我尝试使用const_cast但仍然是以下程序给出错误,'bitsize1'不能出现在常量表达式中。我做错了什么?

#include <string>
#include <bitset>
#include <iostream>
using namespace std;
int main(){

int l = 3; // taken input from user
int bitsize2 = (l * 2);

int bitsize1 = const_cast<int&>(bitsize2);
string temp = "100101";
bitset<const_cast<int&>(bitsize2)> baz (temp);
cout << baz;
return 0;

}

3 个答案:

答案 0 :(得分:0)

const_cast用于强制const 远离而不是生成const。如果你想要常量表达式,那么在C ++ 11后编程中最简单的方法就是使用constexpr:

constexpr int l = 3;
constexpr int bitsize2 = l * 2;

来自用户的输入不能是编译时常量表达式,因此您必须找出其他内容。

答案 1 :(得分:0)

模板在编译时扩展,这意味着编译时应该知道所有模板参数。显然用户输入是运行时数据,因此不能用作模板参数。

答案 2 :(得分:0)

正如其他人所说,您无法在运行时推断出模板参数 你应该考虑使用boost dynamic bitset 它存在于您遇到的确切问题。

  

&#34; dynamic_bitset类与std :: bitset类几乎相同。   区别在于dynamic_bitset的大小(数量   bits)在构造a期间的运行时指定   dynamic_bitset对象,而指定了std :: bitset的大小   在编译时通过整数模板参数。&#34;