C++编程法则100条转换构造函数

Posted 奇妙之二进制

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++编程法则100条转换构造函数相关的知识,希望对你有一定的参考价值。

🥇 关于博主👇🏻👇🏻👇🏻

👀 作者简介: 热衷于知识探索和分享的技术博主。
💂 csdn主页::【奇妙之二进制
✍️ 微信公众号:【Linux 世界

🎉精彩专栏:

   💪 【C++编程法则100条
   🎓 【面向工作git基础教程
​   🧡 【C++11新特性深入剖析
​   📚 【shell脚本编程基础与实战
​   🌎 【Linux网络编程面试
   ✍️ 【C++编译工具cmake入门到精通
   🤩 【Linux文本处理三剑客
   😉 【C++模板编程
   🥰 【VIM实用指南
   🔥 【Linux C/C++编译链接和调试调优
   ✨ 【面向对象分析和设计
   🎉 【Ubuntu/Linux系统管理
   🤔 【C/C++笔面试精选
   ✔️ 【Linux并发编程面试与实战
   🚀 【C/C++常用开源库实战
   😊 【Linux常用命令详解
​ …

💂关于作者: 曾就职于国内知名安防上市公司,现就职于国内知名AMR机器人公司,担任高级系统软件工程师。2020年至今保持CSDN博客专家,CSDN C/C++领域优质创作者头衔。全网5万+粉丝。十载寒冰,难凉热血;多年过去,历经变迁,物是人非。 然而,对于技术的探索和追求从未停歇。 💪坚持创作,热衷分享,初心未改,继往开来!

参考:https://en.cppreference.com/w/cpp/language/converting_constructor

转换构造函数是指未被explicit限制的构造函数:

struct A

    A()           // converting constructor (since C++11)  
    A(int)        // converting constructor
    A(int, int)   // converting constructor (since C++11)
;
 
struct B

    explicit B()  
    explicit B(int)  
    explicit B(int, int)  
;
 
int main()

    A a1 = 1;      // OK: copy-initialization selects A::A(int)
    A a2(2);       // OK: direct-initialization selects A::A(int)
    A a34, 5;    // OK: direct-list-initialization selects A::A(int, int)
    A a4 = 4, 5; // OK: copy-list-initialization selects A::A(int, int)
    A a5 = (A)1;   // OK: explicit cast performs static_cast, direct-initialization
 
//  B b1 = 1;      // error: copy-initialization does not consider B::B(int)
    B b2(2);       // OK: direct-initialization selects B::B(int)
    B b34, 5;    // OK: direct-list-initialization selects B::B(int, int)
//  B b4 = 4, 5; // error: copy-list-initialization selected an explicit constructor
                   //        B::B(int, int)
    B b5 = (B)1;   // OK: explicit cast performs static_cast, direct-initialization
    B b6;          // OK, default-initialization
    B b7;        // OK, direct-list-initialization
//  B b8 = ;     // error: copy-list-initialization selected an explicit constructor
                   //        B::B()
 
    [](...)(a1, a4, a4, a5, b5); // may suppress "unused variable" warnings

以上是关于C++编程法则100条转换构造函数的主要内容,如果未能解决你的问题,请参考以下文章

C++编程法则100条(11)关于&&&修饰成员函数的含义

C++编程法则100条(10)using用法之声明

C++编程法则100条关于内嵌类的使用细节

c++编程 多项式的乘法

C++编程法则100条空{}初始化讨论

C++转换构造函数和隐式转换函数