免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3313 | 回复: 4
打印 上一主题 下一主题

[C++] 隐式转换调用构造函数,explicit关键字无效? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-01 12:21 |只看该作者 |倒序浏览
10可用积分
隐式转换是否会调用了相应的构造(默认构造函数,没有任何参数的那种)
class i{
public:
      int* a;
      int b;
       i(int* x){
                printf("ctor\n");
                a=x;
       }
       i(const i& ii){
               printf("copy ctor\n");
               a=ii.a;
       }
       explicit i(){printf("ctor default\n");}
       i& operator=(const i& ii){
                printf("operator\n");
                a=ii.a;
       }
};   
int main(int argc, char *argv[]){
    i i1;
    int x=20;
    int *b=&x;
    i1=b;
    printf("i1.a=%d,p=%d\n",*(i1.a),i1.a);
    return 0;
}
程序像的输出是
ctor default
ctor
operator
i1.a=20,p=2293596

(1)这里int* b=&x被隐式转换成了i的对象i1=b,但是我的无参数构造函数
explicit i()...是加了explicit关键字的,为什么仍然编译通过并正确执行呢?

(2)而且如果隐式转换生成一个临时对象的话,是不是应该再次打印"ctor default"呢?

=====================================================
我的环境是winxp+devcpp4992,是gcc/gdb的集成环

>gcc --version
gcc (GCC) 3.4.2 (mingw-special)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

请dx给各解释吧,10分感谢!

[ 本帖最后由 jeanlove 于 2009-2-1 12:24 编辑 ]

最佳答案

查看完整内容

explicit 只对有一个参数(或者有多个参数,但除了第一个,其他参数都有默认值)的构造函数起作用。。。

论坛徽章:
0
2 [报告]
发表于 2009-02-01 12:21 |只看该作者
explicit 只对有一个参数(或者有多个参数,但除了第一个,其他参数都有默认值)的构造函数起作用。。。

论坛徽章:
0
3 [报告]
发表于 2009-02-01 13:24 |只看该作者
谢谢楼上的,非常精准的解释,拜过了

论坛徽章:
0
4 [报告]
发表于 2009-02-01 13:31 |只看该作者
原帖由 jeanlove 于 2009-2-1 13:24 发表
谢谢楼上的,非常精准的解释,拜过了



建议不要使用这些晦涩的C++特性。易出错,维护成本高。

论坛徽章:
0
5 [报告]
发表于 2009-02-02 09:35 |只看该作者
有得必有失嘛,C++总体来说还是很好的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP