小编Dav*_*vid的帖子

使用三元运算符并删除移动/复制ctor时Visual Studio不执行RVO

看下面的代码示例,我希望它可以作为返回值优化(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)

c++ visual-studio c++17

5
推荐指数
1
解决办法
188
查看次数

标签 统计

c++ ×1

c++17 ×1

visual-studio ×1