C++中有哪些运算符不能重载?

如题。二楼的“##”是什么运算符?... 如题。
二楼的“##”是什么运算符?
展开
 我来答
匿名用户
2009-07-05
展开全部
大部分的操作符是可以被重载的,例外的只有“.”、“::”、“?:”和“sizeof”。没有什么非禁止operator?:重载的理由,只不过没有必要而已。另外,expr1?expr2:expr3的重载函数无法保证expr2和expr3中只有一个被执行。
而“sizeof”无法被重载是因为不少内部操作,比如指针加法,都依赖于它,例如:

X a[10];
X* p = &a[3];
X* q = &a[3];
p++; // p points to a[4]
// thus the integer value of p must be
// sizeof(X) larger than the integer value of q

这样,sizeof(X)无法在不违背基本语言规则的前提下表达什么新的语义。
在N::m中,N和m都不是表达式,它们只是编译器“认识”的名字,“::”执行的实际操作是编译时的名字域解析,并没有表达式的运算牵涉在内。或许有人会觉得重载一个“x::y”(其中x是实际对象,而非名字域或类名)是一个好主意,但这样做引入了新的语法[译注:重载的本意是让操作符可以有新的语义,而不是更改语法——否则会引起混乱],我可不认为新语法带来的复杂性会给我们什么好处。

原则上来说,“.”运算符是可以被重载的,就像“->”一样。不过,这会带来语义的混淆——我们到底是想和“.”后面的对象打交道呢,还是“.”后面的东东所实际指向的实体打交道呢?看看这个例子(它假设“.”重载是可以的):

class Y {
public:
void f();
// ...
};

class X { // assume that you can overload . public:
Y* p;
Y& operator.() { return *p; }
void f();
// ...
};

void g(X& x)
{
x.f(); // X::f or Y::f or error?
}
百度网友dff52fb5b
2009-07-05 · TA获得超过152个赞
知道答主
回答量:77
采纳率:0%
帮助的人:62.3万
展开全部
C/C++ 里大多数运算符都可以在 C++ 中被重载。C 的运算符中只有 .和 ?:(以及 sizeof,技术上可以看作一个运算符)不可以被重载。C++ 增加了一些自己的运算符,除了 :: 和 .* 外,大多数都可以被重载
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
silvernii
2009-07-05 · TA获得超过3638个赞
知道大有可为答主
回答量:1667
采纳率:0%
帮助的人:1630万
展开全部
.
.*
::
?:
#
##
这6个不可以

参考资料: MSDN operator overloading

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b438542
2009-07-05 · TA获得超过237个赞
知道小有建树答主
回答量:929
采纳率:0%
帮助的人:384万
展开全部
有几个 不多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
兰宁善丁
2019-03-26 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:32%
帮助的人:1048万
展开全部
很简单,
运算符
如+
-
*
/
等,两边的数据类型是可以变化的,
如1+1
对应的是
int型
1.0+1.0
对应的是float型
两个式子调用的程序是不一样的,但用的都是同一个运算符,这就是重载
你自己写的类也可以用到这些运算符,
只要重载你用到的运算符自己写算法就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式