我有一个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想让我这么做,理所当然。它说它无法访问移动构造函数。 然而,编译并按预期运行。这里发生了什么?这是一些编译器优化在我身上耍花招吗?
答案 0 :(得分:2)
工作中Return Value Optimization。 它实际上是C ++ 11标准允许的。检查接受的答案:
c++11 Return value optimization or move?
问题有点不同,但答案适合你的问题。