外来操作符——它们为什么有用?
Exotic Operators - why are they useful?
与其在Google上收集零散的信息(他们不懂符号),不如去问这个网站上的许多编程专家。
我想知道一些操作符:
-
x->y
vs(*x).y
-
x.*y
vs*(x.y)
-
x->*y
vs*(x).*y
vs*(*(x).y)
vs*(x->y)
彼此比较,哪个更快?
第一条只是为了方便,并且已经存在于c中。考虑:
x->y->z
和
(*(*x).y).z
其他两个操作符的作用和你想象的不一样。
x.*y
在x
引用的对象上调用y
所指向的成员函数,而
x->*y
做同样的事情,但x
是一个指针。
struct Foo {
void bar();
};
int main() {
typedef void (Foo::*foo_mem_ptr)();
// y points to Foo::bar
foo_mem_ptr y = &Foo::bar;
Foo x;
// call y with x as this
x.*y();
// same for pointer to x
Foo *px = &x;
px->*y();
}
-
据我所知,这些操作符在基本实现上绝对没有区别——它们是等效的。但是,您可以覆盖
*
和->
以具有不同的行为。 -
它们是等价的,只是语法糖。
-
这是第一种和第二种情况混合在一起。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么使用 "this" 指针调用派生成员函数?
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 为什么 malloc(0) 在"Inside the C++ Object Model?"中有用
- 什么是野牛,为什么它有用
- 为什么move构造函数既没有声明也没有用clang删除
- 什么是清除和设置用于的位以及为什么有用
- 为什么异常规范不能有用
- C++中有哪些不同类型的指针和引用?为什么它们有用
- 为什么用C++编写的 BRMS 不如 Java 中的 BRMS 有用
- 提升序列化库有用吗?为什么不支持"pointer to pointer"序列化?
- 既然其他可滥用但有用的功能已经标准化了,为什么不#pragma一次呢
- 为什么可选的垃圾收集在C++中有用
- 为什么std::equal_to很有用
- 外来操作符——它们为什么有用?