<分区>
代码示例(vs2015编译运行):
#include<cassert>
using namespace std;
int main() {
const char*p = "ohoh";
const char*p1 = "ohoh";
char p3[] = "ohoh";
char p4[] = "ohoh";
assert(p == p1);//OK,success,is this always true?
assert(p3 == p4);//failed
return 0;
}
据我所知,字符串字面量存储在地址空间的readonly
段,而const char*p = "ohoh";
只是生成一个指针到那个位置。但是,编译器似乎只会生成该字符串文字的一个拷贝,因此 p==p1
为真。
这是一种优化,还是标准保证的东西?