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)
| 归档时间: |
|
| 查看次数: |
293 次 |
| 最近记录: |