请问在函数前面加explicit的作用是什么?

vividtang 2004-05-09 03:49:24
请问在函数前面加explicit的作用是什么?
...全文
618 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qwertasdfg123 2004-05-10
  • 打赏
  • 举报
回复
同意 Hotman_x
  • 打赏
  • 举报
回复
implicit:隐式的

explicit:显式的----强迫你显式构造

代码之诗 2004-05-09
  • 打赏
  • 举报
回复
dft2000(皮皮) ( ) 信誉:100 2004-05-09 16:45:00 得分:0


严格类型匹配,楼上的解释了,另外这样做也禁止了默认的构造函数的使用。必须自己明确写出来。哪怕是空的。


--------------------------------------------------------

这样是禁止了默认构造函数的使用,但这与 explicit 无关。即使没有 explicit ,默认构造函数就必需明确写出,哪怕是空的。只要定义了任何一个需要参数的构造函数,编译器就不会为你生成默认构造函数……总之,这与 explicit 无关。

btw:注意,默认构造与隐式转换并没有什么关联,默认构造函数是指“不需要提供参数的构造函数”,无参的和所有参数都有默认值的构造函数都可以成为默认构造函数。
代码之诗 2004-05-09
  • 打赏
  • 举报
回复
我 MSN 是有的,只是在下水平其实有限,多蒙错爱,已经是有几个网友把我错当专家上了当了,有问题当个臭皮匠凑凑份子则可,专门解决问题则在在下能力之外了。

我的 MSN : hotman_x@msn.com
bmwboy 2004-05-09
  • 打赏
  • 举报
回复
好像不可以,如果能,还请高手指出!谢谢!
sunyilei 2004-05-09
  • 打赏
  • 举报
回复
explicit只对构造函数起作用么?难道不能抑制其他类型的隐式转换?
vividtang 2004-05-09
  • 打赏
  • 举报
回复
谢谢大家,我明白了。另外,hotman_x你有msn吗?
如果你不介意,我可以加你,讨论。
lei601 2004-05-09
  • 打赏
  • 举报
回复
防止构造函数进行隐式转换
dft2000 2004-05-09
  • 打赏
  • 举报
回复
严格类型匹配,楼上的解释了,另外这样做也禁止了默认的构造函数的使用。必须自己明确写出来。哪怕是空的。
黄汉 2004-05-09
  • 打赏
  • 举报
回复
看到题目,差点忘了,谢谢解答。
代码之诗 2004-05-09
  • 打赏
  • 举报
回复
explicit 只对构造函数起作用,用来抑制隐式转换。如:
class A {
A(int a);
};
int Function(A a);

当调用 Function(2) 的时候,2 会隐式转换为 A 类型。这种情况常常不是程序员想要的结果,所以,要避免之,就可以这样写:

class A {
explicit A(int a);
};
int Function(A a);

这样,当调用 Function(2) 的时候,编译器会给出错误信息(除非 Function 有个以 int 为参数的重载形式),这就避免了在程序员毫不知情的情况下出现错误。

64,701

社区成员

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

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