gpt4 book ai didi

c++ - 运算符(operator)的测序规则和副作用

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

以下代码是否具有明确定义的行为:

#include <boost/filesystem.hpp>
...
void foo (fs::path const& dir, fs::path file)
{
file = dir / std::move (file); // Is it ok?
}

如果我们假设我们有 operator/(path const& a, path&& b) 来修改它的第二个右值参数?

附言。这不是特定于提升的问题。 Boost 文件系统库仅用作可能出现此类问题的上下文示例。问题是关于在 C++ 中使用 x = y/move(x) 表达式的安全性,当 x,y 是一个类并且 operator/ 采用右值引用并可以修改它。

最佳答案

您的代码等同于此代码,其中已解析重载运算符:

file.operator=(operator/(dir, std::move(file));

这是安全的。函数参数的评估在函数调用之前排序,虽然方法主题的评估相对于参数是无序的,但那里没有什么可做的,所以 file 的修改不能简单地干扰使用 file 作为左值。

关于c++ - 运算符(operator)的测序规则和副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44655414/

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