首页 > 后端开发 > C++ > 为什么初始化列表不能直接用在 C 运算符的右侧?

为什么初始化列表不能直接用在 C 运算符的右侧?

Patricia Arquette
发布: 2024-12-23 11:14:14
原创
355 人浏览过

Why Can't Initializer Lists Be Directly Used on the Right-Hand Side of C   Operators?

初始化器列表和运算符的右侧

初始化器列表是初始化变量和对象的便捷方法,但它们的用途是限制在运算符的右侧。这可能令人费解,因为在这种情况下允许初始化器列表似乎是合乎逻辑的。

限制的原因

根据 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板