为什么 (const char[2]){'A', '\0'} 和 "A" 放置在不同的内存位置?

The*_*ist 0 c++

(const char[2]){'A', '\0'}根据我的调查,和的存储位置"A" 是不同的。

cout<< &(const char[2]){'A', '\0'} <<endl; 
cout<< &"A" <<endl;
Run Code Online (Sandbox Code Playgroud)

为什么它们被放置在不同的内存位置?

use*_*522 5

(const char[2]){'A', '\0'}不是合法的标准 C++。

如果它为您编译,那么您的编译器将接受它作为该语言的扩展,并且它的任何行为都将取决于您的编译器。这没有标准化。然而,这种结构在标准 C 中是允许的,并被称为复合文字。它的行为与 C 中的字符串文字不同

但无论如何,即使你写了

cout<< &"A" <<endl;
cout<< &"A" <<endl;
Run Code Online (Sandbox Code Playgroud)

无法保证您两次都会得到相同的结果。编译器完全可以自由决定如何选择字符串文字的内存位置。它可以使用两个不同的位置,或者将相同的位置重复用于"A". 它还可能重叠用于不同字符串文字等的内存。