c++ explicit
发布日期:2022-04-04 06:36:17 浏览次数:3 分类:博客文章

本文共 1180 字,大约阅读时间需要 3 分钟。

http://zh.cppreference.com/w/cpp/language/explicit

 

explicit 指定符

 
 
 
 

explicit 指定符指定构造函数或转换函数 (C++11 起)不允许或。它仅可出现于在其类中定义的这种函数的 decl-specifier-seq 中。

注意

声明不带有函数指定符 explicit 的拥有单个非默认参数的 (C++11 前)构造函数被称作。

构造函数(除了/)和用户定义转换函数都可以是函数模板; explicit 的含义不变。

示例

struct A{    A(int) { } // 转换构造函数 A(int, int) { } // 转换构造函数 (C++11) operator bool() const { return true; }}; struct B{ explicit B(int) { } explicit B(int, int) { } explicit operator bool() const { return true; }}; int main(){ A a1 = 1; // OK:复制初始化选择 A::A(int) A a2(2); // OK:直接初始化选择 A::A(int) A a3 {4, 5}; // OK:直接列表初始化选择 A::A(int, int) A a4 = {4, 5}; // OK:复制列表初始化选择 A::A(int, int) A a5 = (A)1; // OK:显式转型进行 static_cast if (a1) ; // OK:A::operator bool() bool na1 = a1; // OK:复制初始化选择 A::operator bool() bool na2 = static_cast
(a1); // OK:static_cast 进行直接初始化 // B b1 = 1; // 错误:复制初始化不考虑 B::B(int) B b2(2); // OK:直接初始化选择 B::B(int) B b3 {4, 5}; // OK:直接列表初始化选择 B::B(int, int)// B b4 = {4, 5}; // 错误:复制列表初始化不考虑 B::B(int,int) B b5 = (B)1; // OK:显式转型进行 static_cast if (b2) ; // OK:B::operator bool()// bool nb1 = b2; // 错误:复制初始化不考虑 B::operator bool() bool nb2 = static_cast
(b2); // OK:static_cast 进行直接初始化}

转载地址:https://www.cnblogs.com/l2017/p/6905470.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:转 cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
下一篇:c++ 委托构造函数

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月15日 23时24分15秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章