如果我們有一個非可移動的,不可複製的類和非顯式構造函數,我們可以按照以下方式返回並使用它(在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