yisikaipu怎么咬着人不放

My_Love 2012-10-25 04:00:45
C++标准2003(2011标准也一样) $5.2.5/3
If E1 has the type “pointer to class X,” then the expression E1->E2 is converted to the equivalent form (*(E1)).E2;
意思是 a->prinfs(); 其实是要转换为 (*a).printfs();

$5.2.5/1
The postfix expression before the dot or arrow is evaluated;
意思是 (*a) 要先被求值
-------------------------------------------------------
以上是这怂引用的标准,那个眼神好能看出“未定义行为”?
我说你娃不要把无知+偏执当勇敢显摆好不!
我看C标准你也就穿开裆裤,我看C++标准你丫上中学没?
...全文
269 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cbzjzsb123 2012-10-30
  • 打赏
  • 举报
回复
fzamygsd 2012-10-27
  • 打赏
  • 举报
回复
My_Love 2012-10-25
  • 打赏
  • 举报
回复
再回过头看那个帖主的问题:
#include<iostream> #include<cstring> using namespace std; class A { public: void prinfs() { cout<<"aaaaa"<<endl; } }; int main( ) { A *a; a->prinfs(); return 0; } 

按C++11标准,这里A是一个POD类型。POD就是C里的struct\union等,并且兼容C11标准。
按C11标准的定义,要a->prinfs()有意义只要*a的Type是A即可。
查看typeid关键字的标准定义,正好符合!

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧