我想将非常量变量转换为常量变量。我尝试使用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;
}
答案 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;