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

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-23 15:26:15

使用gcc3.4.2和vc++8.0(sp1)

1.
int main()
{
    int( int ); // error
}

struct foo {};
int main()
{
    foo( foo ); // good
}


2.
struct foo {};
int main()
{
    foo a( void ); // good
    foo a( void ); // good
}

struct foo {};
int main()
{
    foo a( void ); // good
    foo( foo );    // good
}

struct foo {};
int main()
{
    foo a( void ); // good
    foo( foo );    // good
    foo a( void ); // error
}

阅读(907) | 评论(4) | 转发(0) |
0

上一篇:_at_

下一篇:代码片断

给主人留下些什么吧!~~

网友评论2012-11-23 15:27:09

lijunhui
C++中对象可以和类型同名 可以这样理解,但是在实际中还是有些不一样的。

网友评论2012-11-23 15:27:02

hyerty
"一男" 说的很清晰啊,学习了,谢谢~~

网友评论2012-11-23 15:26:54

周星星
^_^ 谢谢一男,“C++中对象可以和类型同名”一针见血呀,所有问题都迎刃而解。

网友评论2012-11-23 15:26:47

一男
1 foo(foo); // 这句声明了类型为foo的一个foo对象。
int(int); // 这个非法,int不能用作对象名。
// C++中对象可以和类型同名,对象名隐藏了类型名,这在C时代就是真的。可以用struct/class/union/enum关键字线式使用类型名

2 第一个不过是两个对同一个函数的声明
第二个声明了一个函数a然后声明了一个类型为foo的对象foo
第三个声明了一个函数a然后声明了对象foo,这时foo是对象,foo a(void);就非法了。可以写成struct foo a(void);