作者:cocoC陳靜雯具_606 | 来源:互联网 | 2023-01-30 22:23
我有一个非常简单的程序,它只是无限地输出一个指向const volatile char的const指针; 它是这样的:
const volatile char* const str = "ABCDEFGHIJKL";
while(true) {
cout <<'\r' <
问题是,运行此程序时,输出为1.有一种方法来解决这个问题,这是输出const_cast(str)
代替str
.
但是如果我做const_cast(str)
输出是1,就像在演员之前那样,所以我猜测1输出是由volatile
关键字引起的,这很奇怪因为我认为volatile只会让编译器避免在该变量中进行优化,这应该是'改变它的价值.
因此,我的问题是世界是如何将1作为输出的.
注意:
我已经尝试在Ubuntu 16.04中使用GCC进行编译,在Windows 7中使用MinGW进行编译,因此编译器不是问题(我猜).
1> WhiZTiM..:
你被隐式转换序列(ICS)所困扰.C++ std::ostream
工具没有volatile
类型的重载.ICS启动并选择bool
类型的重载(因为指针类型,无论cv资格是否可以隐式转换为bool
).
因此,您会看到1
...将输出更改为std::boolalpha
,您应该看到true
.
例:
#include
#include
int main(){
const volatile char* const str = "ABCDEFGHIJKL";
std::cout <<'\r' <
打印:
1
true
演示
转换是指针 - > bool; null指针为false,任何其他值为true.