【发布时间】:2017-06-28 21:20:38
【问题描述】:
我有一个非常简单的程序,它只是无限期地输出一个指向 const volatile char 的 const 指针;它是这样的:
const volatile char* const str = "ABCDEFGHIJKL";
while(true) {
cout << '\r' << str;
}
问题是当运行这个程序时,输出为 1。有一种方法可以解决这个问题,输出 const_cast<char*>(str) 而不是 str。
但是如果我这样做 const_cast<volatile char*>(str) 输出是 1,就像在强制转换之前一样,所以我猜测 1 输出是由 volatile 关键字引起的,这很奇怪,因为我认为 volatile 只会使编译器避免对该变量进行优化,这不应该改变它的值。
因此,我的问题是,这个 1 到底是如何作为输出出现的。
注意:
我尝试在 Ubuntu 16.04 中使用 GCC 编译它,在 Windows 7 中使用 MinGW 编译它,所以编译器不是问题(我猜)。
【问题讨论】:
-
常量和易失性?有意义吗?
-
@user4581301 -- const 和 volatile 在字符串文字上是 not 的。他们在指针上。
-
@PeteBecker 不,它是一个指向 const volatile char 的 const 指针。
-
@manni66 这复制了一个可能被其他来源更改的变量,但从程序的角度来看,它具有一个常量值和地址。