我想了解運算符重載如何工作的更多信息。運算符逗號重載
我明白,重載逗號運算符可能不是最好的主意,但這僅用於教學目的。
我期待下面的代碼使用我的重載操作符(我使用了括號,因爲我知道逗號操作符具有最低的優先級)來構造一個包含(1,2)的向量,然後調用向量的賦值操作符。
但是,我得到一個錯誤:
no known conversion from argument 1 from 'int' to 'const std::vector<int>&'
我不明白爲什麼會這樣。 (1,2)應該構建一個向量,所以它不應該試圖從int
轉換爲vector<int>
?
#include <vector>
#include <utility>
using std::vector;
using std::move;
template <typename T>
vector<T> operator,(const T& v1, const T& v2)
{
vector<T> v;
v.push_back(v1);
v.push_back(v2);
return move(v);
}
int main()
{
vector<int> a;
a = (1,2);
return 0;
}
「*所以它不應該試圖從一個int轉換爲一個向量?*」 - 這正是它試圖做的事情,但由於沒有隻有'int'的'vector'構造函數,它不會不知道該怎麼做,而這正是你所得到的錯誤信息,不是嗎? – Dolda2000
當然不是。他沒有複製消息的那部分內容,說明它與嘗試將有效的賦值運算符('operator =')函數與對象'a'匹配失敗相關。 – Paulo1205
@ Dolda2000:「*不存在僅用於int *的向量構造函數」 - 否,但是有一個接受'vector :: size_type'來代替(指定默認構造項的初始數目來填充向量),並且'int'可以被分配給'vector :: size_type'。然而,'vector'不能'int' /'size_type',只顯式*,這就是爲什麼'int'不能直接傳遞給'vector :: operator ='的原因。 –