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

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

周星星
明白了,但g++中也不冲突:
struct foo
{
    int foo;
    void bar()
    {
        typeid( foo );       // 成员名称
        typeid( class foo ); // 类名称
        typeid( ::foo );     // 类名称
    }
};

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

pAnic
我不知道其他编译器怎么处理,这里是VC6的代码,成员变量和类名一致会导致二义性。
class foo {
//int foo;
void test()
{
std::cout  
<<  typeid(foo).name() //*@#%$(**&%#$%^
<< std::endl;
}
};

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

周星星
不明白,能不能举个例子给我。

我觉得g++的做法很正确,因为C语言是允许的,那它就可以确保兼容C标准。
二来,C++标准之所以不允许直接调用构造函数估计就是因为这个原因。

网友评论2012-11-20 10:42:58

pAnic
个人认为不合法。
例如foo的成员函数使用RTTI动态获取类型信息,当参数为foo的时候会产生二义性。