为什么字符串文字比较是C++;? 我在C++第三版特别是
是否将两个相同的字符文本分配为一个是实现定义的(§C.1)。为什么字符串文字比较是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() { 如果
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";
}