Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831390
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-20 10:42:22

struct foo
{
    int foo;
};
如果按照C++标准,上述代码合不合法?

[附]
a. vc2005 认为它不合法。
b. g++3.4.2 认为它合法,仅当出现构造函数时,才认为它不合法。比如
struct foo
{
    int foo;
    foo();
};
g++3.4.2 认为它不合法。
阅读(2946) | 评论(20) | 转发(0) |
给主人留下些什么吧!~~

网友评论2012-11-20 10:46:12

luoda254
我是想问,man.CPerson::fun()是在编译的时候就已准确给出了CPerson中定义的fun()的地址,还是在执行的时候由虚函数表获得函数地址(把man转换成CPerson型,再由CPerson的虚函数表得到函数地址)?

网友评论2012-11-20 10:46:03

luoda254
kaikai 你这个方法太好了,看到你写的
(((CPerson)man).*pfn)();  
或者:  
(static_cast<CPerson>(man).*pfn)();
之后,我想问问man.CPerson::fun()的实现是不是转化为
((CPerson)man).fun()        来实现的 ?

网友评论2012-11-20 10:45:53

kaikai
CMan man;
man.CPerson::fun();
void (CPerson::*pfn)();
pfn = &CPerson::fun;
(((CPerson)man).*pfn)();
或者:
(static_cast<CPerson>(man).*pfn)();

网友评论2012-11-20 10:45:45

c++ beginer
深奥!!!收藏!

网友评论2012-11-20 10:45:38

清风雨
应该没有。

因为函数指针指向已确定,不能通过加作用域来调整。