看下面的代码示例,我希望它可以作为返回值优化(RVO)的一部分执行强制复制省略并使用C ++ 17(/ std:c ++ 17)进行编译,但是在Visual Studio 2017上编译时会出错(我正在使用VS17,更具体地说是15.9.8)。
class NoCopyOrMove
{
public:
NoCopyOrMove() = default;
NoCopyOrMove(int a, int b){}
NoCopyOrMove(const NoCopyOrMove&) = delete;
NoCopyOrMove& operator=(const NoCopyOrMove&) = delete;
NoCopyOrMove(NoCopyOrMove&&) = delete;
NoCopyOrMove& operator=(NoCopyOrMove&&) = delete;
private:
int a, b;
};
NoCopyOrMove get(bool b)
{
return b ? NoCopyOrMove(1,2) : NoCopyOrMove();
//if (b)
// return NoCopyOrMove(1, 2);
//return NoCopyOrMove();
}
int main()
{
NoCopyOrMove m = get(true);
}
Run Code Online (Sandbox Code Playgroud)
错误是:
error C2280: 'NoCopyOrMove::NoCopyOrMove(NoCopyOrMove &&)': attempting to reference a deleted function
note: see …Run Code Online (Sandbox Code Playgroud)