下面这两种写法本质上有什么区别吗?

zengkun100 2006-11-19 10:33:49
class Test
{
int i;
public:
Test(int j) : i(j){}
};

int main(int argc, char* argv[])
{
Test t; //将不能通过编译,错误为没有默认的构造函数
Test t(); //这行代码可以通过编译,跟上面的那行比较有什么区别?
return 0;
}
...全文
201 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengkun100 2006-11-20
  • 打赏
  • 举报
回复
N多年都没有注意的一个问题,今天总算是弄清楚了。恭喜啊!
OOPhaisky 2006-11-19
  • 打赏
  • 举报
回复
Test t();
------------------------------------------------------------------------------
这里t是一个函数,没有参数,返回值为Test类型。

在给楼主举个例子:
Test t(Test());
这里也是声明了一个函数,参数是一个函数指针(指向的函数没有参数,返回值是Test类型),返回值是Test类型。
alan001 2006-11-19
  • 打赏
  • 举报
回复
Test t();是声明了一个函数,返回值是Test............
healer_kx 2006-11-19
  • 打赏
  • 举报
回复
完全同意楼上的,和试验方法.
taodm 2006-11-19
  • 打赏
  • 举报
回复
Test t();是声明了一个函数。
不信,你cout << typeid(t).name()就知道了。
vigorous001 2006-11-19
  • 打赏
  • 举报
回复
Test(int j) : i(j){}
如果定义了构造函数,就必须自己定义缺省构造函数,缺省构造函数没有后面的括号。定义缺省构造函数后Test t; 就不会出现编译错误。
大概你错误的理解了Test t();的意义。
LiChenYue 2006-11-19
  • 打赏
  • 举报
回复
同意ing
蹭点分

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧