相关疑难解决方法(0)

为什么C++ 11删除的函数参与重载解析?

为什么C++ 11使" deleted"函数参与重载决策
为什么这有用?或者换句话说,为什么它们被隐藏而不是被完全删除?

c++ c++11

86
推荐指数
2
解决办法
5699
查看次数

返回本地对象是否需要移动语义?

当按值返回本地对象时,C++编译器可以通过利用移动语义优化不必要的副本(复制省略).
" 可以优化"意味着如果不满足适当的条件,则行为应该基于副本回退到默认的值语义返回.
因此,据我所知,按值返回可复制对象始终有效.

但编译器(clang和gcc)似乎不同意我的解释,如下面的MWE所示.

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

Foo f() { return Foo(); }  // error: call to explicitly deleted constructor of 'Foo'
Foo g() { Foo a; return a; }  // gcc complains, clang is fine
Foo x = g();  // error: call to explicitly deleted constructor of 'A'
Run Code Online (Sandbox Code Playgroud)

Q1:按值返回是否要求对象可移动?
Q2:如果没有,gcc和clang在我的MWE上行为不端,还是我错过了其他的东西?

c++ c++11

16
推荐指数
2
解决办法
2148
查看次数

标签 统计

c++ ×2

c++11 ×2