初始化器列表和运算符的右侧
初始化器列表是初始化变量和对象的便捷方法,但它们的用途是限制在运算符的右侧。这可能令人费解,因为在这种情况下允许初始化器列表似乎是合乎逻辑的。
限制的原因
根据 C 标准,不考虑初始化器列表表达式。由于运算符的参数通常需要表达式,因此禁止使用纯初始值设定项列表。
异常
有一些允许使用初始值设定项列表的例外:
基本原理
C 11 标准委员会决定不允许在运算符的左侧可简化解析器的实现。允许它们位于右侧而不允许它们位于左侧会太不一致。
替代方案
幸运的是,还有其他方法可以使用初始化列表位于运算符的右侧。一种选择是将初始值设定项列表括在括号中,这会将其转换为右值引用表达式:
baz << (std::initializer_list<int>{1, -2, "foo", 4, 5});
另一种选择是创建适当类型的临时变量并使用初始值设定项列表对其进行初始化:
auto data = bar{1, -2, "foo", 4, 5}; baz << data;
虽然这些替代方案可能不如直接使用初始化列表那么方便,但它们为右侧的限制提供了一种解决方法运营商。
以上是为什么初始化列表不能直接用在 C 运算符的右侧?的详细内容。更多信息请关注PHP中文网其他相关文章!