2012-05-10 30 views
2

我幾乎可以肯定,不是,但我沒有找到一個明確的答案:可能超大括號?

是否有可能超載大括號?如在:

class Foo 
{ 
    int i; 
    public: 
    int operator{}(int _i){return _i+42;};  
}; 

int main() 
{ 
    Foo f; 
    f{2}; 
    return 0; 
} 

它從來沒有被提及,既不被允許也不被允許。 gcc 4.6沒有編譯它,但這並不意味着它不被標準所允許,對吧?

+0

對不起斯特芬,C++不會讓你重載大括號:( –

+0

什麼會的論據是什麼?運營商具有操作數,被傳遞到過載。 –

回答

8

在C++花括號{}不是[](數組下標運算符)或()(函數調用運算符)不是運算符,因此它們不能被重載。

+0

此外,重載運營商都在'[以上列舉.oper]'。由於'{}'沒有出現在列表中,所以它不能被重載。 – bdonlan

+2

@bdonlan'='和','_do_出現在列表中,但只能在運算符時重載;重載(因此,'f(a,b)'忽略任何重載的'operator,()',但'f((a,b))'不會)。 –