如果我们有一个非可移动的,不可复制的类和非显式构造函数,我们可以按照以下方式返回并使用它(在C++ 11中):使用显式构造函数返回不可复制的不可移动对象
#include <iostream>
class NonCop
{
public:
/*non explicit*/ NonCop(int a, int b) : number(a + b) {}
NonCop(const NonCop&) = delete;
int number;
};
NonCop get_non_cop()
{
return {1, 2};
}
int main()
{
NonCop &&nc = get_non_cop();
std::cout << "three: " << nc.number << std::endl;
return 0;
}
但是,如果构造函数是显式的,它不起作用。是否有任何方法在C++ 11/C++ 14中执行此操作,但在NonCop
中没有修改?
目前我正在使用派生自NonCop的解决方法,即“deexplicits”构造函数,但它看起来并不漂亮。
Dupe of [this](http://stackoverflow.com/questions/34263916/is-it-possible-to-return-an-instance-of-a-non-movable-non-copyable-type)为C++ 11/14。请注意,在C++ 17中,保证副本elision将使代码编译。 – NathanOliver
我很困惑,这实际上是有效的,也很困惑,你想这样做。你不允许调用者不改变地返回同一个对象。我希望这只是一个学术练习,而不是你实际想要做的事情。 – Mehrdad
@Mehrdad:在C++ 03中,您还可以将一个临时对象绑定到一个const引用,该引用将对象的生存期延长到作用域的末尾。我认为它被范围卫士用于愚蠢。 – knivil