对象从返回值构造而没有复制或移动构造函数

时间:2015-07-03 19:54:47

标签: c++ visual-studio-2013 constructor intellisense move

我有一个Action类看起来像这样(以其简化形式):

struct Action {

explicit Action(...some parameters...); // I only use this to construct Action objects

Action(const Action&) = delete; // Don't want copy constructor
Action(Action&&) = delete; // Same for move constructor

}

在其他一些翻译单元中,我试图这样做:

Action action = someMethodForGettingActions(); // The method returns Action objects by rvalue

Visual Studio的Intellisense想让我这么做,理所当然。它说它无法访问移动构造函数。 然而,编译并按预期运行。这里发生了什么?这是一些编译器优化在我身上耍花招吗?

1 个答案:

答案 0 :(得分:2)

工作中Return Value Optimization。 它实际上是C ++ 11标准允许的。检查接受的答案:

c++11 Return value optimization or move?

问题有点不同,但答案适合你的问题。