fbpx
维基百科

结构解引用运算符

结构解引用运算符(英語:Structure dereference operator),也称“通过指针访问成员运算符”(Element selection through pointer),是 C语言C++->运算符。其功能是获取运算符左侧的指针所指向的对象的某个成员(member b of object pointed to by a)。例如:

struct foo{  int value; } foo *p=new foo(); std::cout<<p->value; 

该运算符的优先级较高,与函数调用运算符( )、数组下标运算符[ ]、通过引用选择成员运算符.相同。也是自左向右结合。即p->a->b等价于(p->a)->b

该运算符可以视作为解引用运算符*语法糖。即p->a相当于(*p).a

C++对该运算符的使用规定为:[1]

  1. 运算符左端如果是个指针类型,则直接对该指针类型解引用访问所指向对象的成员。即该运算符重载在此情形下未被使用。
  2. 运算符左端如果不是指针类型,编译器则调用该运算符的重载版本。如果没有重载版本则编译报错。该运算符的重载版本的返回值,或者是指针类型,或者是内含重载定义了->运算符的类型;对这两种情形编译器分别做指针解引用与递归调用返回类型的重载版本的->运算符。

运算符重载的示例代码 编辑

 #include <iostream>  class foo { public:  void func(){  std::cout<<"foo say hello "<<std::endl;  } }; class bar {  foo a; public:  foo* operator->(){  return &a;  }  void func(){  std::cout<<"bar said hello"<<std::endl;  } }; class D {  bar b; public:  bar operator->(){  return b;  }  void func(){  std::cout<<"D said hello"<<std::endl;  } }; int main() {  D dumb, *pd=&dumb;  pd->func(); //pc为一个类的指针 所以直接解引用  D d;  d->func(); //d不是一个指针类型,所以调用了D::operator->()重载版本 } 

参考文献 编辑

  1. ^ 《C++ Primer》中文版第445页。

结构解引用运算符, 此條目需要补充更多来源, 2015年7月18日, 请协助補充多方面可靠来源以改善这篇条目, 无法查证的内容可能會因為异议提出而被移除, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, 英語, structure, dereference, operator, 也称, 通过指针访问成员运算符, element, selection, through, pointer, c语言与c, 运算符, 其功能是获. 此條目需要补充更多来源 2015年7月18日 请协助補充多方面可靠来源以改善这篇条目 无法查证的内容可能會因為异议提出而被移除 致使用者 请搜索一下条目的标题 来源搜索 结构解引用运算符 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 结构解引用运算符 英語 Structure dereference operator 也称 通过指针访问成员运算符 Element selection through pointer 是 C语言与C 的 gt 运算符 其功能是获取运算符左侧的指针所指向的对象的某个成员 member b of object pointed to by a 例如 struct foo int value foo p new foo std cout lt lt p gt value 该运算符的优先级较高 与函数调用运算符 数组下标运算符 通过引用选择成员运算符 相同 也是自左向右结合 即p gt a gt b等价于 p gt a gt b 该运算符可以视作为解引用运算符 的语法糖 即p gt a相当于 p a C 对该运算符的使用规定为 1 运算符左端如果是个指针类型 则直接对该指针类型解引用访问所指向对象的成员 即该运算符重载在此情形下未被使用 运算符左端如果不是指针类型 编译器则调用该运算符的重载版本 如果没有重载版本则编译报错 该运算符的重载版本的返回值 或者是指针类型 或者是内含重载定义了 gt 运算符的类型 对这两种情形编译器分别做指针解引用与递归调用返回类型的重载版本的 gt 运算符 运算符重载的示例代码 编辑 include lt iostream gt class foo public void func std cout lt lt foo say hello lt lt std endl class bar foo a public foo operator gt return amp a void func std cout lt lt bar said hello lt lt std endl class D bar b public bar operator gt return b void func std cout lt lt D said hello lt lt std endl int main D dumb pd amp dumb pd gt func pc为一个类的指针 所以直接解引用 D d d gt func d不是一个指针类型 所以调用了D operator gt 重载版本 参考文献 编辑 C Primer 中文版第445页 取自 https zh wikipedia org w index php title 结构解引用运算符 amp oldid 70593926, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。