const volatile char字符串打印不正确

Gar*_*ain 7 c++ string volatile

我有一个非常简单的程序,它只是无限地输出一个指向const volatile char的const指针; 它是这样的:

const volatile char* const str = "ABCDEFGHIJKL";

while(true) {
    cout << '\r' << str;
}
Run Code Online (Sandbox Code Playgroud)

问题是,运行此程序时,输出为1.有一种方法来解决这个问题,这是输出const_cast<char*>(str)代替str.

但是如果我做const_cast<volatile char*>(str)输出是1,就像在演员之前那样,所以我猜测1输出是由volatile关键字引起的,这很奇怪因为我认为volatile只会让编译器避免在该变量中进行优化,这应该是'改变它的价值.

因此,我的问题是世界是如何将1作为输出的.

注意:

我已经尝试在Ubuntu 16.04中使用GCC进行编译,在Windows 7中使用MinGW进行编译,因此编译器不是问题(我猜).

Whi*_*TiM 13

你被隐式转换序列(ICS)所困扰.C++ std::ostream工具没有volatile类型的重载.ICS启动并选择bool类型的重载(因为指针类型,无论cv资格是否可以隐式转换为bool).

因此,您会看到1...将输出更改为std::boolalpha,您应该看到true.

例:

#include <iostream>
#include <iomanip>

int main(){
    const volatile char* const str = "ABCDEFGHIJKL";
    std::cout << '\r' << str;
    std::cout << '\r' << std::boolalpha << str;
}
Run Code Online (Sandbox Code Playgroud)

打印:

1
true
Run Code Online (Sandbox Code Playgroud)

演示

  • 转换是指针 - > bool; null指针为false,任何其他值为true. (2认同)