我知道可以重载已经存在于c ++中的运算符来定义所需的行为,但是是否可以创建自己的运算符?
例如,创建一个返回容器大小的运算符#
:
template<typename T>
size_t operator#(const T& obj) { return obj.size(); }
vector<int> v(1024);
cout << #v; // prints 1024
答案 0 :(得分:9)
没有。您需要坚持解析器已经知道如何处理的运算符。重载可以扩展表达式的含义,但语法是固定的。
答案 1 :(得分:1)
不,这是不可能的。
无论如何,如果你将容器称为“define”会发生什么?
答案 2 :(得分:1)
您可以创建一个新类型(称之为Foo
),然后创建一个Bar::operator Foo()
,将Bar
转换为Foo
。
这可能不是你想要的。
您无法建立自己的#
运营商。就像一个启动器一样,它在哪里适合(已经非常臃肿)的C ++优先级表?它是从左到右还是从右到左相关联?你是如何指定这些东西的呢?还有更多?
创建一个品牌打击新操作员的问题非常多,语言根本不允许这样做。
答案 3 :(得分:0)
已经回答过了,不!您只能重载所有已知的运算符,顺便说一下,您不能改变预定运算符的行为,那么您不能更改运算符'+'的行为,例如,对于int数据类型。 ;)