0
我正在爲一個基本類型編寫一個簡單的包裝,並且試圖避免編寫太多標準運算符。我希望隱式類型轉換會有所幫助,但事實並非如此。這裏有一個簡化的例子:用二元運算符C++隱式轉換
struct Int
{
int _i;
Int(int i=0) :_i{i} {}
Int operator+ (const Int& rhs) {return _i+rhs._i;}
};
int main(int argc, char *argv[])
{
(void)(Int(1) + 2); // Fine
(void)(2 + Int(1)); // error: invalid operands to binary expression ('int' and 'Int')
}
我正在使用llvm。主編的第一行很好。第二個導致錯誤。現在,我希望在第二行發生的是2會隱式轉換爲Int(2),然後調用operator +。爲什麼沒有發生?爲什麼隱式轉換髮生在第一行?
看的boost ::經營者避免這樣的問題,它有助於去除樣板書面運營商的情況。 – polkadotcadaver
@艾略特羅賓遜,謝謝。這有我正在尋找的解釋。我希望能在某些時候在C++規範中找到它。 – user3101366