Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1010289
  • 博文数量: 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 认为它不合法。
阅读(3299) | 评论(20) | 转发(0) |
给主人留下些什么吧!~~

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

luoda254
清风雨你好,我不是做设计,我也不会做设计,我只是个初学者,我现在只不过是学C++的语法,我的意思是有没有和
man.CPerson::fun()        相类似的
(man.CPerson::*pfn)()    的语法
因为man.CPerson::fun()是正确的,而(man.CPerson::*pfn)()编译错误,
我也不懂它是怎么绑定的,如果没有这种(man.CPerson::*pfn)()写法,请你回答C++中没有这样的语法,如果有这种语法,只是我写错了,请你把正确的写法告诉我

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

清风雨
也就是说,实在需要。

你可以和这个设计人员交涉,或者让他解决,或者他提供解决方案。

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

luoda254
我都等了一夜了,我很苦恼



# re:luoda254 2006-03-10 11:32 清风雨
严格来说,我的意思前面已经表达出来了。

virtual是运行时绑定,取决于对象的实际类型;
如果根据声明类型,也就是静态绑定,在编译期完成。

所以,解决方法有两种:
1 不要把该函数声明为virtual的;
2 通过别的函数间接调用该函数(编译期可以选择使用父类的或者实际类型的)。

网友评论2012-11-20 10:44:51

luoda254
我不是搞设计,我是想弄清楚这个语法,比如
CMan 为CPerson的派生类,CMan中的fun重写了CPerson中的virtual fun(),现在
CMan  man;
man.CPerson::fun()是合法的,但如果换成指针,
void (CPerson::*pfn)();  
pfn=&CPerson::fun;  
如果这么写(man.CPerson::*pfn)()是错误的,我又试了好几种写法都不行,按你的说法是不是C++不提供这种搞法?

网友评论2012-11-20 10:44:43

清风雨
既然如此,说明你的设计不应该用virtual函数。virtual就是希望他根据实例真实的类型分派(runtime绑定)。

非得需要,在派生类里通过别的函数间接调用(编译期选择)。