为什么字符串文字比较是C++;? 我在C++第三版特别是

为什么字符串文字比较是C++;? 我在C++第三版特别是,c++,visual-studio-2010,g++,string-literals,g++4.8,C++,Visual Studio 2010,G++,String Literals,G++4.8,是否将两个相同的字符文本分配为一个是实现定义的(§C.1)。 const char* p="Heraclitus"; const char* q="Heraclitus"; void g () { if (p == q ) cout << "one!\n"; // result is implementation defined // ... } const char*p=“赫拉克利特”; const char*q=“赫拉克利特”; 空g() { 如果

是否将两个相同的字符文本分配为一个是实现定义的(§C.1)。

const char* p="Heraclitus";
const char* q="Heraclitus";

void g ()
{
       if (p == q ) cout << "one!\n"; // result is implementation defined
       // ...
}
const char*p=“赫拉克利特”;
const char*q=“赫拉克利特”;
空g()
{

如果(p==q)cout我们可以从中找到一个基本原理,它说:

GCC可以作为一个例子,但不能作为动机。 部分原因是希望在ROMmable数据中包含字符串文字 是为了支持,呃,嬉戏。我隐约记得曾经用过 两个C实现(在X3J11决定发布之前) (make),其中字符串文本或自动合并 或存储在常量数据程序段中。给定 现有的各种实践和易用性 解决需要原始UNIX属性时的问题, 似乎最好不要试图保证独特性和 字符串文字的可写性


他有有用的背景information@Closers:谁投票关闭?有什么问题吗?旁白:在VC++中启用以匹配g++的行为。默认情况下,它是关闭的。@meet,问题没有问题。它被关闭是因为它被认为是以前询问和回答的问题的重复。编译器是否选择使用相同的内存字符串常量的y与否取决于实现,不受语言语义要求的影响。因此,编译器可能会出于内存使用效率的原因选择使用相同的内存。但程序员不应该依赖于这种情况。@Barry这些不是重复的,我可以从我的答案中删除基本原理,然后将其删除他们问了两个不同的问题1)我能依赖行为吗2)为什么行为是这样的。
#include <iostream>
int main()
{
    const char* p="Heraclitus";
    const char* q="Heraclitus";
    if(p==q)
        std::cout<<"fine!!!";
    else
        std::cout<<"!fine";
}