gpt4 book ai didi

c++ - 参数评估和未定义的行为

转载 作者:搜寻专家 更新时间:2023-10-31 01:19:36 25 4
gpt4 key购买 nike

给定此示例(这是 boost::multi_index_container 文档中关于更新回滚的示例的简化):

#include <iostream>

struct change
{
int val_;
change(int const &val) : val_(val)
{
}

void operator() (int &v) const
{
v = val_;
}
};

void do_it(int &v, change const &c1, change const &c2)
{
c1(v);
c2(v);
}

main()
{
int i = 17;
int orig = i;
do_it(i, change(11), change(orig));
std::cout << "i = " << i << std::endl;
}

此处是否需要i 的显式拷贝(到orig)?或者可以更简单地写成:

        int i = 17;
do_it(i, change(11), change(i));

在那种情况下,do_it 调用后 i 的值是否仍然保证为 17?这两个 change 参数都需要在执行函数体之前构造。

语言是否保证在函数开始之前构造所有参数? (如果没有保证,那么编译器可能会延迟 c2 的构造,直到 c1operator() 运行之后,因此最终值为 11)

最佳答案

函数调用的所有参数都在调用函数之前进行评估。未指定评估参数的顺序。

在你的情况下 i 仍然是 17。

关于c++ - 参数评估和未定义的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5889249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com