gpt4 book ai didi

c++ - const volatile char 字符串打印不正确

转载 作者:可可西里 更新时间:2023-11-01 18:19:47 28 4
gpt4 key购买 nike

我有一个非常简单的程序,它只是无限期地输出一个指向 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 编译它,所以编译器不是问题(我猜)。

最佳答案

你被 Implicit conversion Sequences (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;
}

打印:

1
true

Demo

关于c++ - const volatile char 字符串打印不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44812722/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com