使用非const变量代替所需的const变量(C )
Use non-const variable in place of required const variable (C++)
我正在编写的程序的一部分涉及获取整数列表(例如15、18、25),并将每个整数转换为二进制。我在列表中迭代,并使用以下代码转换每个代码:
std::string binary = std::bitset<8>(v).to_string();
((v)是我要转换的整数)
但是,这条代码行的问题在于它定义了输出的二进制字符串的长度,因此2将变成" 00000010",而31将变成" 00011111",我当然不能变得太低,否则我会遇到一些麻烦数字较大,但我希望每个二进制字符串的长度等于真实的二进制数(2是" 10",31是" 11111")。我有这样的理由。
因此,我尝试用我试图根据以下代码转换的数字更改的int替换&lt; 8>:
int length_of_binary;
if (v <= 1) {
length_of_binary = 1;
}
else if (v <= 3) {
length_of_binary = 2;
}
else if (v <= 8) {
length_of_binary = 4;
}
else if (v <= 16) {
length_of_binary = 5;
}
else if (v <= 32) {
length_of_binary = 6;
}
std::string binary = std::bitset<length_of_binary>(v).to_string();
问题在于,当悬停在(现在波动的)变量length_of_binary上时,我会遇到以下错误:
"+5 overloads. expression must have a constant value."
和该程序不会编译。我什至尝试通过分配欺骗编译器Length_of_binary对const int的值,但仍然无法正常工作。
有办法解决此问题吗?如果没有,有一块代码/功能会给我我的需求吗?
如评论中所述:您面临的问题是,该值需要在编译时知道该值(而不是依赖运行时)。
因此,您可以使用固定的表示形式,例如std::bitset<N>
像已经完成一样将其转换为字符串,然后修剪领先的零。可以这样实现:
std::string text = std::bitset<8>(25).to_string(); // binary representation
text.erase(0, text.find_first_not_of('0')); // zeroes trimmed
std::cout << text; // prints out: 11001
请注意,这只是一个示例。您仍然必须处理0
的情况,并考虑您的输入数据是否不会超过8位表示。
尽管如此,使用这种方法,您不需要length_of_binary
变量和相关的if-else
节 - 这简化了很多。
相关文章:
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 在内存不足之前,我可以声明多少个 const 变量?
- 为什么我不能在返回 const 的布尔函数中为类成员变量赋值?C++
- 在类 (C++) 之外设置 const int 成员变量
- 当设置为 const 变量时使用 nullptr
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 既然我们有内联变量,extern const 还有用吗?
- 声明与 const 变量和成员函数相同的标识符
- 无法使用 'const Node *' 类型的右值初始化 'Node *' 类型的变量
- const变量是否可以在具有默认值的参数中赋值(作为可选参数)
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- const_cast const 方法中的"this"将"this"分配给外部变量?
- 如何检查函数是否真的获得了定义为 const 的变量?
- 编译器在传递 const 变量时返回错误:模板参数不是常量表达式
- 继承,使基本成员变量const
- 是否可以更改函数中成员变量"const"值?
- 在 c++ 中声明一个全局范围变量 const
- 在c++中声明一个局部变量const的好处,如果它的值在编译时不知道