在什么情况下应该使用explicit?

yxfly 2007-04-24 09:49:25
explicit的作用是防止隐式的使用拷贝函数,在什么情况下,我们需要这个关键字呢?能否举个例子呢?谢谢!
...全文
252 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
todototry 2007-04-24
  • 打赏
  • 举报
回复
错误 1 error C2664: 'fun' : cannot convert parameter 1 from 'int' to 'A' d:\myproject\vs2005\testplate\testplate\testplate.cpp 2096
==========================================
explicit的作用
todototry 2007-04-24
  • 打赏
  • 举报
回复
这样可以编译,你换新的编译器看看,vs2005
lidongri 2007-04-24
  • 打赏
  • 举报
回复
class A
{
public:
explicit A(int i){size = i;}
private:
int size;
};

void fun(A a)
{}

int main()
{
fun(3);
return 0;
}
--
可以编译
explicit的目的是
A b = 3;不成功
如果没有加的话就会成功
yxfly 2007-04-24
  • 打赏
  • 举报
回复
我主要想知道,为什么需要这个关键字?用了它的主要目的是什么?
yxfly 2007-04-24
  • 打赏
  • 举报
回复
todototry(来csdn,学会扯淡了...) ( ) 信誉:100 Blog 加为好友 2007-04-24 10:04:21 得分: 0


class A
{
public:
explicit A(int i){size = i;}
private:
int size;
};

void fun(A a)
{}

int main()
{
fun(3);
return 0;
}
这时则不能编译因为阻止转了

============================================================================
这样能编译吧
改成下面的情况发现编译错误的:
int main()
{
fun(); //Error
return 0;
}
asdf511 2007-04-24
  • 打赏
  • 举报
回复
建立数值类型
todototry 2007-04-24
  • 打赏
  • 举报
回复
class A
{
public:
explicit A(int i){size = i;}
private:
int size;
};

void fun(A a)
{}

int main()
{
fun(3);
return 0;
}
这时则不能编译因为阻止转了
todototry 2007-04-24
  • 打赏
  • 举报
回复
class A
{
public:
A(int i){size = i;}
private:
int size;
};

void fun(A a)
{}

int main()
{
fun(3);
return 0;
}
编译成功,因为3隐式转A类型的对象
todototry 2007-04-24
  • 打赏
  • 举报
回复
防止单参构造函数隐式转换
taodm 2007-04-24
  • 打赏
  • 举报
回复
到<Effective C++>里搜索explicit即可。

64,683

社区成员

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

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