关于VC++中用void修饰函数的返回值和无返回值的问题~高手讲解下 感激不尽

guihudie 2008-03-02 02:34:19
关于VOID 修饰函数的返回值和函数无返回值的问题我查看了好基本书,自己也在VC++6.0上试了试,可是还是有点没弄太明白麻烦高手们给详细讲解下 小弟我感激不尽。
void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。
同时有些书上写到了“如果函数没有返回值,那么应声明为void类型”
林锐博士《高质量C/C++编程》中提到:“C++语言有很严格的类型安全检查,不允许上述情况(指函数不加类型声明)发生”。因此,为了避免混乱,我们在编写C/C++程序时,对于任何函数都必须一个不漏地指定其类型。如果函数没有返回值,一定要声明为void类型。

以上这些内容都是书上写到的,猛一看貌似写的很清楚,很容易理解,但是孙鑫的<VC++深入详解> 中再将构造函数的时候,说构造函数无返回值,若果如上面所说的 无返回值等价于void 那么为什么在VC++6.0中给构造函数前加上void 编译会出错??是编译器的原因?还是上面的解释不完全正确??同时我又在vc++6.0 中有以下的几种代码:
1)
class Point
{
public:
int x;
int y;
output()
{
cout<<x<<endl<<y<<endl;
return ;
}
}; //编译出错。01.cpp(11) :warning C4183: 'output': member function definition looks like a ctor, but name does not match enclosing class
01.cpp(10) : error C2561: 'output' : function must return a value
2class Point
{
public:
int x;
int y;
void output()
{
cout<<x<<endl<<y<<endl;
return ;
}
};//编译无措,也无警告
3)
f()
{
return;
}//编译无措,只有1个警告。01.cpp(14) : warning C4508: 'f' : function should return a value; 'void' return type assumed
4)
void f()
{
return;
}// 无措无警告。
第1和第3种区别只是1个在类的定义中,1个在函数的定义中,为什么类中出错而函数中不出错?本人英语比较差,查看了MSDN没看明白什么意思,所以请教各位大侠们,不干盲目的相信中文版的书籍,因为我在学习C语言的时候就遇到过好多课本都将const解释为常量,但事实确不是,只能理解为只读。所以在这里请教下大侠们讲解下 void 感激不尽!3Q
...全文
424 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mnky 2008-03-02
  • 打赏
  • 举报
回复
楼主只需要记住:
1、构造函数和析构函数是没有返回类型的,也不用void,但是其他的都必须有
2、编译的错误提示和警告,不用非得抠字眼,不行就是不行,你可以把报警等级提高,或者把warning也都当作error来看。
crabboy123 2008-03-02
  • 打赏
  • 举报
回复
学习了,楼上说的不错。
Minkey 2008-03-02
  • 打赏
  • 举报
回复
为什么在VC++6.0中给构造函数前加上void 编译会出错??
--------------------------------
标准规定构造函数不能有返回类型(包括void类型).

3)中的情况在早期C++中是为了保持与C的兼容.在C语言中,没有声明返回类型的函数默认为返回int型.所以其实
VC6.0的那条警告也是不准确的.应该是'int' return type assumed
另外,VC6.0出现于C++标准发布之前.在C++标准中已经不允许类似3)中的那种定义.楼主可以试着用DevCpp或VC2005
编译一下,3)应该也是会报错,而不是警告的.

初学C++的话,还是选一本跟着标准走的书吧.例如,<<C++ Primer>>


yuyunliuhen 2008-03-02
  • 打赏
  • 举报
回复
^_^
loping 2008-03-02
  • 打赏
  • 举报
回复
路过,我只是小菜。。。....
loping 2008-03-02
  • 打赏
  • 举报
回复
路过,我只是小菜。。。
michney 2008-03-02
  • 打赏
  • 举报
回复
C++的规定,构造析构函数就是无返回值
不是void,记住就行了
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-02 02:34
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下