【发布时间】:2015-01-23 16:26:26
【问题描述】:
我知道用字符串字面量初始化 char 数组是完全可能的:
char arr[] = "foo";
C++11 8.5.2/1 这么说:
char数组(无论是普通的char、signed char还是unsigned char)、char16_t数组、char32_t数组,或wchar_t数组可以用窄字符字面量初始化,char16_t字符串字面量,char32_t字符串 文字或宽字符串文字,或用括号括起来的适当类型的字符串文字。 字符串文字值的连续字符初始化数组的元素。 ...
但是,您可以在条件表达式中对 两个 字符串文字做同样的事情吗?比如这样:
char arr[] = MY_BOOLEAN_MACRO() ? "foo" : "bar";
(其中MY_BOOLEAN_MACRO() 扩展为1 或0)。
C++11 5.16(条件运算符)的相关部分如下:
1 ... 第一个表达式根据上下文转换为
bool(第 4 条)。 它被求值,如果是true,条件表达式的结果就是第二个表达式的值, 否则是第三个表达式。 ...4 如果第二个和第三个操作数是相同值类别的glvalues并且具有相同的类型,则结果 属于该类型和值类别,并且如果第二个或第三个操作数是位域,或者如果 两者都是位域。
请注意,文字的长度相同,因此它们都是 const char[4] 类型的左值。
GCC one ideone 接受构造。但是通过阅读标准,我根本不确定它是否合法。有没有人有更好的见解?
【问题讨论】:
标签: c++ language-lawyer string-literals