用c ++创建自己的运算符

时间:2011-08-27 03:30:00

标签: c++ operator-overloading

我知道可以重载已经存在于c ++中的运算符来定义所需的行为,但是是否可以创建自己的运算符?

例如,创建一个返回容器大小的运算符#

template<typename T>
size_t operator#(const T& obj) { return obj.size(); }

vector<int> v(1024);
cout << #v; // prints 1024

4 个答案:

答案 0 :(得分:9)

没有。您需要坚持解析器已经知道如何处理的运算符。重载可以扩展表达式的含义,但语法是固定的。

答案 1 :(得分:1)

不,这是不可能的。

无论如何,如果你将容器称为“define”会发生什么?

答案 2 :(得分:1)

您可以创建一个新类型(称之为Foo),然后创建一个Bar::operator Foo(),将Bar转换为Foo

这可能不是你想要的。

您无法建立自己的#运营商。就像一个启动器一样,它在哪里适合(已经非常臃肿)的C ++优先级表?它是从左到右还是从右到左相关联?你是如何指定这些东西的呢?还有更多?

创建一个品牌打击新操作员的问题非常多,语言根本不允许这样做。

答案 3 :(得分:0)

已经回答过了,不!您只能重载所有已知的运算符,顺便说一下,您不能改变预定运算符的行为,那么您不能更改运算符'+'的行为,例如,对于int数据类型。 ;)