c++ - 丢弃 const,这是定义明确的行为吗?

标签 c++

<分区>

Possible Duplicate:
Is const_cast safe?

显然我永远不会写这段代码,但它是真实程序中出现的一个非常简单的例子。

#include <iostream>

void change(const int& data)
{
    int& data2 = const_cast<int&>(data);
    data2 = 100;
}

int main()
{
    int thing = 123;
    change(thing);

    std::cout << thing << "\n";
}

这是否会改变所引用的数据是明确定义的行为,还是允许编译器假设因为它传递的是 const int& 函数无法更改传入的值并生成相应的代码?

编辑:我尝试过的所有编译器都输出更改后的值 100。

这似乎是 Can C++ compiler assume a const bool & value will not change? 的拷贝所以我很高兴结束这个。

最佳答案

除非您知道原始值是否恒定,否则这不是明确定义的行为。它将在您给出的确切示例中起作用。但是,如果您传入一个 const 变量,它可能会导致内存访问冲突。这是因为编译器将 const 变量放在只读内存页上。

关于c++ - 丢弃 const,这是定义明确的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12772357/

相关文章:

c++ - PNPDeviceID 值的含义是什么?

c++ - 寻找惯用的方式来连接对象的字符串表示

c++ - 如何在 C++ 中将字符串更改为多字 rune 字?

javascript - 基于 Google v8 函数的调试器 API

c++ - 'uintmax_t'到 'size_t'和 'unsigned int'转换丢失的数据是多少?

c++ - 按时间管理许可证

c++ - 虚函数声明和定义的困惑

c++ - 简单的 std::sort 不工作

c++ - 如何在跨平台应用中使用QtWinExtras

c++ - Cocos2d-x 3.0 - 新类的 DrawNode()