构造函数参数的求值顺序[重复]

2024-01-06

假设我有这门课:

struct A
{
  A(int, int, int) {}
};

我这样初始化它:

A{ a(), b(), c() };

功能在哪里a(), b() and c()全部返回int。应该a()之前被调用b() and b() before c()?

我对标准中的以下段落感到困惑(8.5.4 [dcl.init.list] p4):

在花括号初始化列表的初始化列表中,初始化子句,包括任何由 pack 产生的子句 扩展(14.5.3)按照它们出现的顺序进行评估。也就是说,每个值的计算和 与给定的初始化子句相关的副作用在每个值计算和侧面之前排序 与初始值设定项列表的逗号分隔列表中跟随它的任何初始值设定项子句关联的效果。 [ 注意:无论初始化的语义如何,此评估顺序都成立;例如,它适用于 当初始化列表的元素被解释为构造函数调用的参数时,即使 通常,调用的参数没有顺序限制。 ——尾注]

根据引用,这些函数将按照它们出现的顺序被调用,但是当我用我的编译器(g++-4.8.1)测试它时,它不成立。我是否误解了什么?


这是一个海湾合作委员会的错误 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51253(谢谢Casey https://stackoverflow.com/questions/17381573/order-of-evaluation-of-arguments-to-a-constructor/17381687?noredirect=1#comment25231543_17381687用于链接)。您引用的段落一般适用于列表初始化,其中术语在第 8.5.4/1 段中定义得非常清楚:

列表初始化是对象或引用的初始化大括号初始化列表。这样的初始化器是 称为初始化列表,以及逗号分隔的初始化子句列表中的被称为elements的 初始化列表。

没有理由相信这应该只适用于初始化列表构造函数的调用。此外,您引用的段落中的注释澄清了:

本次评价排序无论初始化的语义如何,都成立;例如,它当初始化列表的元素被解释为构造函数调用的参数时适用,尽管通常调用的参数没有顺序限制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构造函数参数的求值顺序[重复] 的相关文章

随机推荐

  • Visual Studio 任务运行程序“语法错误:在严格模式下使用 const。”

    使用Win10 Pro VS2015进行 网站 项目 不是asp net 基本网站 当尝试保存 重新加载 gulpfile js 时 我收到错误消息 来自任务运行程序资源管理器 输出 语法错误 在严格模式下使用 const 在目前的情况下
  • pm安装错误的包名

    我最近制作了一个新应用程序 只有一个最小的 MainActivity 存根 当我使用 Android Studio 和 gradle 项目运行应用程序时 应用程序失败并显示以下消息 Uploading file local path C U
  • 如何在Java中更快地解压缩XZ文件?

    我的 SQLite 数据库文件大小为 85MB 使用 XZ 格式压缩 大小已减小到 16MB 我使用以下代码 以及由Java 的 XZ http tukaani org xz java html 在Android Jelly Bean中解压
  • 四舍五入双精度值,同时保留尾随零

    这是我的函数 将数字四舍五入到小数点后两位 但是当四舍五入的数字为 1 50 时 它似乎忽略尾随零并只返回 1 5 public static double roundOff double number double accuracy 20
  • Python re.sub:忽略替换字符串中的反向引用

    我想用字符串替换模式 该字符串在变量中给出 当然 它可能包含 1 并且不应将其解释为反向引用 而应简单地解释为 1 我怎样才能做到这一点 之前的答案使用re escape 会转义太多 并且您会在替换和替换字符串中得到不需要的反斜杠 似乎在
  • 如何限制用户在输入元素中输入10位数字?

    我想为电话号码创建一个输入字段 我正在使用 JavaScript 动态创建输入字段
  • 带对齐的字符串格式货币

    print this is 0 gt 10 2f format 3 44 打印出 this is 3 44 即分开 从金额 有没有办法在金额旁边的正确位置打印带有货币符号的间隔列 例如 this is 3 44 I tried print
  • MongoDB:使用 2 个嵌套数组更新文档中的平均值

    我有以下 MongoDB 文档 id ObjectId company name Name registered 2 21 2015 2 00 trucks truck id TEB7622 weight 88 33 capacity 27
  • CamelCase JSON WebAPI 子对象(嵌套对象、子对象)

    我正在创建一个复杂的对象 其中包含要从我的 Web api 控制器返回的子对象 嵌套对象 该对象包含其他对象类型的列表 列表中的这些子对象类型遵循 NET 中使用的 pascal 大小写 var persons peopleLookup V
  • 如何最好地将模糊的 ProgressBar 放置在屏幕上的 ConstraintLayout 上?

    当我单击 登录 按钮时 会显示一个进度条 我通过在顶部添加一个工具栏对布局进行了修改 似乎该工具栏现在遮盖了进度栏 如何使该进度条在屏幕中央的某个位置可见 非常感谢您的帮助 布局xml代码如下所示 活动登录 xml
  • Chrome、Safari 和 Firefox 中内联块元素之间的幽灵空间 [重复]

    这个问题在这里已经有答案了 如何删除内联块元素之间的幽灵空间 这是一个jsfiddlehttp jsfiddle net hFDcV http jsfiddle net hFDcV 您可以清楚地看到 div 之间的水平空间 StackOve
  • 忽略实体框架中的特定列? [复制]

    这个问题在这里已经有答案了 我从实体框架版本 4 1 10331 0 中的数据库自动生成了模型 我想忽略实体中的列 而不使用 Fluent Api 且不更改ObjectContext into DbContext 当然 不会从 SQL 表中
  • 使用 pdfmake 在段落周围添加边框

    我正在通过生成pdfpdfmake http bpampuch github io pdfmake 假设我有这样的 pdf 内容 var docDefinition content Lorem ipsum dolor sit amet co
  • Python 中的字符串是池化的吗?

    Python 是否有一个所有字符串的池 并且它们 字符串 是单例吗 更准确地说 在下面的代码中 是在内存中创建了一个还是两个字符串 a str num b str num 字符串在 Python 中是不可变的 因此实现可以决定是否实习 这是
  • heroku 上的 Hapi 服务器无法绑定端口

    我正在为 ReactJS 应用程序开发 Hapi 服务器 但当我尝试部署到 Heroku 时 收到 R10 错误 无法在启动后 60 秒内绑定到 PORT 到底是怎么回事 我正在使用 process env PORT 我也尝试过 parse
  • Web 应用程序安全的好指南? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我非常擅长制作网络应用程序 并且知道如何在客户端 服务器等之间传输数据 尽管学习如何使数据交换更安全 但我需要一些帮助 这就是为什么我有点害怕发
  • 如何在 C++ 中存储变量数据

    我正在创建一个存储有关特定数据源的元数据的类 元数据采用树状结构 与 XML 的结构非常相似 元数据值可以是整数 小数或字符串值 我很好奇 C 中是否有一种好方法来存储这种情况的变体数据 我希望变体使用标准库 因此我避免使用可用的 COM
  • Numba:如何抑制

    我的 numba 代码中不断出现此错误 Warning 101 0 Unused argument self 我的 numba 代码如下 如何抑制错误消息 autojit def initialise output data self in
  • 使用 $switch 将分数添加到 MongoDB 聚合

    我正在尝试根据哪个值向我的 mongodb 聚合添加一个分数name字段匹配 例如 如果name与 sitt 完全匹配 得分为100 如果name匹配 sitt i 得分为 50 这是我的代码 db getCollection tags a
  • 构造函数参数的求值顺序[重复]

    这个问题在这里已经有答案了 假设我有这门课 struct A A int int int 我这样初始化它 A a b c 功能在哪里a b and c 全部返回int 应该a 之前被调用b and b before c 我对标准中的以下段落