(const char[2]){'A', '\0'}根据我的调查,和的存储位置"A"
是不同的。
cout<< &(const char[2]){'A', '\0'} <<endl;
cout<< &"A" <<endl;
Run Code Online (Sandbox Code Playgroud)
为什么它们被放置在不同的内存位置?
(const char[2]){'A', '\0'}不是合法的标准 C++。
如果它为您编译,那么您的编译器将接受它作为该语言的扩展,并且它的任何行为都将取决于您的编译器。这没有标准化。然而,这种结构在标准 C 中是允许的,并被称为复合文字。它的行为与 C 中的字符串文字不同。
但无论如何,即使你写了
cout<< &"A" <<endl;
cout<< &"A" <<endl;
Run Code Online (Sandbox Code Playgroud)
无法保证您两次都会得到相同的结果。编译器完全可以自由决定如何选择字符串文字的内存位置。它可以使用两个不同的位置,或者将相同的位置重复用于"A". 它还可能重叠用于不同字符串文字等的内存。