相关疑难解决方法(0)

构造函数调用return语句

请考虑以下示例:

class X {
public:
    X() = default;
    X(const X&) = default;
    X(X&&) = delete;
};

X foo() {
    X result;
    return result;
}

int main() {
    foo();
}
Run Code Online (Sandbox Code Playgroud)

Clang和GCC对该计划是否有效表示不同意见.GCC尝试在调用期间初始化临时函数时调用move构造函数,该函数foo()已被删除,从而导致编译错误.Clang处理这个很好,即使有-fno-elide-constructors.

任何人都可以解释为什么GCC被允许在这种情况下调用移动构造函数?不是result左值?

c++ language-lawyer c++17

13
推荐指数
2
解决办法
514
查看次数

标签 统计

c++ ×1

c++17 ×1

language-lawyer ×1