点运算符 (.) 是"real"运算符吗?
Is the dot operator (.) a "real" operator?
根据我的理解,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;
永远没有意义。
甚至::
也被视为运算符("范围解析"运算符(,通常与左侧的命名空间/类型名称以及右侧的命名空间/类型/成员名称一起使用。
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 增量运算符与后缀混淆
- 一个关于在C++中重载布尔运算符的问题
- 运算符C++ "delete []"仅删除 2 个前值
- 模板类无法识别友元运算符
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 关闭||运算符优化
- 通过继承类使用来自不同命名空间的运算符
- C++Cast运算符过载
- 如何使用AngelScript注册SFML Vector2运算符
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 布尔比较运算符是如何在C++中工作的
- 重载运算符new[]的行为取决于析构函数
- 点运算符 (.) 是"real"运算符吗?