可不可以调用构造函数

OOPhaisky 2006-06-09 07:23:08
一直以为在程序级别不可以直接调用构造函数(好像在书上看到过),但是今天随意的实验了一下,意料之外的现象:

class foo{
public:
foo(){ cout << "foo" << endl; }
foo(int a){ cout << a << endl; }
};
foo f;

结果在vs2003和vs2005都可以像下面这样显式调用两个constutctor:
f.foo::foo();
f.foo::foo(2);
但是不可以(还是在vs2003和vs2005)
f.foo();
f.foo(2);

然后在g++中试验,却发现:
f.foo::foo();
f.foo::foo(2);
f.foo();
f.foo(2);
这4中形式都不可以,编译出错。

请问高人,在c++标准中是否允许在程序级别直接调用constructor?
...全文
200 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
OOPhaisky 2006-06-10
  • 打赏
  • 举报
回复
to 楼上各位:

那也就是说vs对在这一点上有bug了?
langzi8818 2006-06-10
  • 打赏
  • 举报
回复
不可以 显式 调用 constructor
OOPhaisky 2006-06-10
  • 打赏
  • 举报
回复
谢谢各位,结贴了。
jixingzhong 2006-06-10
  • 打赏
  • 举报
回复
结果在vs2003和vs2005都可以像下面这样显式调用两个constutctor:
f.foo::foo();
f.foo::foo(2);
但是不可以(还是在vs2003和vs2005)
f.foo();
f.foo(2);
===================
这个行为是不符合标准的 ....

但是理解为 bug 似乎太严重了,
就如 VC6.0 一样,
支持的东西太多了,
难免有些问题存在的 ... 呵呵
Torch009 2006-06-10
  • 打赏
  • 举报
回复
试试就知道了。可以吧。
cnhgj 2006-06-09
  • 打赏
  • 举报
回复
不可以 显式 调用 constructor
TrueZq 2006-06-09
  • 打赏
  • 举报
回复
迄今为止标准C++不能显式调用构造函数,但可以显式调用析构函数。
jixingzhong 2006-06-09
  • 打赏
  • 举报
回复
确切一点的说:

不可以 显式 调用 constructor ...

因为在一些操作中,
如果权限足够,
这个 constructor 可能会被隐式的调用,
比如函数参数传递, 构造可能被隐式调用了 ...
jixingzhong 2006-06-09
  • 打赏
  • 举报
回复
不可以调用 constructor
cunsh 2006-06-09
  • 打赏
  • 举报
回复

mark

64,641

社区成员

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

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