以下代码编译正常:
g++ -std=c++11 test.cpp -Wall -Wextra -Wfatal-errors && ./a.out
然而,如果我从{*this}
中移除花括号并使用*this
代替,我将面临错误:
错误:使用已删除的函数‘Obj::Position::Position(Obj::Position&&)’
{*this}
和*this
之间有什么区别?
class Obj
{
template<bool> friend class Position;
double data;
public:
class Position
{
const Obj& ref;
public:
inline Position(const Obj& ref): ref(ref){}
inline Position(Position const &) = delete;
inline Position(Position &&) = delete;
};
inline Obj(){}
inline Obj(const double &data): data(data){}
inline auto get_pos() const-> Position{return {*this};} /* <--- here */
inline auto get_pos()-> Position{return {*this};}
};
int main()
{
return 0;
}
Position(Obj::Position&&)
而不是Position(Obj::Position&)
呢?看起来相反了。 - ar2015Position(Position&&)
而不是Position(Position const&)
吗?这是因为你有一个prvaluePosition
对象来初始化返回值,移动构造函数就更匹配。如果你注释掉inline Position(Position &&) = delete;
这一行,错误信息将包含复制构造函数。 - Praetorian