点运算符 (.) 是"real"运算符吗?

Is the dot operator (.) a "real" operator?

本文关键字:运算符 real 点运算      更新时间:2023-10-16

根据我的理解,C++中的运算符采用的操作数可以是原始数据类型或对象或文字。

例如,+运算符采用两个操作数(可以是基元数据类型或对象或文本(,例如:

result1 = an_int_var + a_float_var;
result2 = obj1 + obj2;
result3 = 2 + 5;
result4 = obj1 + an_int_var;
result5 = obj1 + 5;
result6 = an_int_var + 5

但我注意到.运算符采用的操作数既不是原始数据类型,也不是对象也不是文字,例如:

var1 = obj1.age;

obj1是一个对象,但究竟是什么age(它不是原始数据类型,也不是对象也不是文字(?!

是的,它是成员访问运算符。 在此上下文中,age是一个 id 表达式。

没有什么说所有运算符都必须采用"原始数据类型"或对象或文字 - 那些可以允许它们在一侧但不允许另一侧的运算符。 例如,赋值运算符(=(可以在右侧使用文字,但不能在左侧使用。 (foo = 0;根据foo是什么,这可能有意义,但0 = foo;永远没有意义。

甚至::也被视为运算符("范围解析"运算符(,通常与左侧的命名空间/类型名称以及右侧的命名空间/类型/成员名称一起使用。