为什么这是一个未定义的行为?
Why is this one an undefined behaviour?
在我的 c++ 书中,我刚刚找到了一个代码,书中说有一个未定义的行为。
# include <iostream>
using namespace std;
int main( )
{
const char * a = "aaa";
char * b = const_cast<char *>(a);
cout << a << 'n' << b << 'n';
b[0] = 'b'; // here undef. behaviour
cout << a << 'n' << b << 'n';
}
我不明白为什么.有谁知道吗?
字符串文字是不可变的,因此它们应该存储在const char *
的变量中,以防止意外尝试更改它们。const_cast
会删除此保护层,然后b[0] = 'b';
对其执行写入操作。由于它仍然是它指向的字符串文本,因此此写入是未定义的行为。
相关文章:
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 在VSCode中编译C++给了我一个未定义的参考
- 我可以定义一个 constexpr 匿名/未命名变量吗?
- 访问从联合与另一个成员集复制的联合中的一个成员是否未定义或未指定?
- 为什么T是未定义的?我正在尝试实现一个用于双链表的节点类,它不喜欢我使用友元运算符后的T
- 在另一个文件中初始化的 extern 数组中未定义的引用
- 我对C++程序有一个未定义的参考,不知道如何处理它
- 我正在尝试在我的类中创建一个静态成员,但编译器警告我它是未定义的
- 对 Class::Class() 和函数在一个文件中的未定义引用? c++
- 为什么这是一个未定义的行为?
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 对另一个静态库中静态库方法的未定义引用
- 在链接链接静态(GSOAP)库的共享库时,为什么会得到一个未定义的符号
- 如何将一个或多个(未定义的数字)参数传递给函数
- 对于我的 ComplexNumber 中的某些方法,我得到了一个奇怪的未定义错误引用.cpp,不过我对模板很陌生
- 为什么当我尝试编译时,我的 c++ 代码不断返回对我的一个构造函数的"未定义的引用"?
- 错误访问另一个插件中的类(错误:未定义的引用)
- 给自己一个std::shared_ptr<std::thread>。已定义或未定义的行为
- 对函数的未定义引用,该功能是另一个类的成员