为什么这是一种未定义的行为?
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';
正在对其执行写入。由于它仍然是指向的字符串文字,因此此写入是未定义的行为。
在我的 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';
正在对其执行写入。由于它仍然是指向的字符串文字,因此此写入是未定义的行为。