我在 The C++ Programming Language special 3rd edition 中阅读了以下内容:
是否将两个相同的字符文字分配为一个是实现定义的(§C.1)。
const char* p="Heraclitus";
const char* q="Heraclitus";
void g ()
{
if (p == q ) cout << "one!\n"; // result is implementation defined
// ...
}
请注意, == 在应用于指针时比较地址(指针值),而不是指向的值。
我在 gcc 4.8.1 和 MSVS 2010 上尝试过以下程序
#include <iostream>
int main()
{
const char* p="Heraclitus";
const char* q="Heraclitus";
if(p==q)
std::cout<<"fine!!!";
else
std::cout<<"!fine";
}
输出:
美好的!!!(在 gcc 4.8.1 上)
!fine(在 MSVS 2010 上)
为什么将其保留为实现定义的行为?是什么原因?