复合文字

C 标准在 C11-§6.5.2.5/ 3 中说:

后缀表达式由带括号的类型名称后跟括号括起的初始值设定项列表组成,是一个复合文字。它提供了一个未命名的对象,其值由初始化列表给出。 99)

和脚注 99 说:

请注意,这与强制转换表达式不同。例如,强制转换指定转换为标量类型或仅指定 void ,并且转换表达式的结果不是左值。

注意:

字符串文字和具有 const 限定类型的复合文字不需要指定不同的对象。 101)

101)这允许实现共享具有相同或重叠表示的字符串文字和常量复合文字的存储。

示例以标准给出:
C11-§6.5.2.5/ 13:

与字符串文字一样,const 限定的复合文字可以放入只读内存中,甚至可以共享。例如,

(const char []){"abc"} == "abc"

如果文字的存储是共享的,则可能会产生 1。