2012-05-10 25 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))'不会)。 –