内部下面的代码编译细:C++ {*此}花括号
g++ -std=c++11 test.cpp -Wall -Wextra -Wfatal-errors && ./a.out
但是,如果我从{*this}
除去大括号和使用*this
相反,我将与错误面临:
error: use of deleted function ‘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&)''。它看起来相反。 – ar2015
@ ar2015你是说你为什么在错误信息中看到'Position(Position &&)'而不是'Position(Position const&)'?这是因为你有一个prvalue'Position'对象来初始化返回值,移动构造函数是一个更好的匹配。如果注释掉'inline Position(Position &&)= delete;'行,则错误消息将包含复制构造函数。 – Praetorian
它基本上是一个“我禁止它,然后我试图这样做”的情况“如果这实际上是必需的 – Swift