內部下面的代碼編譯細: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