【发布时间】:2015-02-16 08:23:52
【问题描述】:
我想做这样的事情
#include <iostream>
#include <memory>
struct Foo {};
using FooPtr = std::unique_ptr<Foo>;
FooPtr makeFoo() { return FooPtr(new Foo()); }
struct Baz
{
Baz(FooPtr foo) : Baz(std::move(foo), bar(foo)) {}
Baz(FooPtr foo, int something) : _foo{ std::move(foo) }, _something{ something } {}
private:
FooPtr _foo;
int _something;
static int bar(const FooPtr & ptr)
{
std::cout << "bar!" << std::endl;
return 42;
}
};
int main() {
Baz baz(makeFoo());
return 0;
}
我的问题是:函数参数评估的顺序是未指定的,因此传递一个将从一个参数中移动的值以及使用 相同实例调用另一个函数的结果是否安全>,作为对 const 的引用传递,作为另一个参数?
我认为问题可以归结为何时执行实际的移动操作,这一点我并不完全清楚(尤其是在开启优化时)。
【问题讨论】:
标签: c++ c++11 move rvalue sequence-points