首页 > 编程语言 >C++中explicit的用法

C++中explicit的用法

时间:2023-02-12 00:44:05浏览次数:37  
标签:Test1 Test2 int explicit C++ 用法 num 构造函数

C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。

1 是个构造;2 是个默认且隐含的类型转换操作符。

所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造器的参数类型, 这时候编译器就自动调用这个构造器, 创建一个AAA的对象。

这样看起来好象很酷, 很方便。 但在某些情况下, 却违背了程序员的本意。 这时候就要在这个构造器前面加上explicit修饰, 指定这个构造器只能被明确的调用/使用, 不能作为类型转换操作符被隐含的使用。


解析:explicit构造函数是用来防止隐式转换的。请看下面的代码:

#include<iostream>
#include<algorithm>
using namespace std;

class Test1{
    public:
        Test1(int num):n(num){}
    private:
        int n;
};

class Test2{
    public:
        explicit Test2(int num):n(num){}
    private:
        int n;
};
int main(){
    Test1 t1 = 12;//正确 
//    Test2 t2 = 14;//会报错 
    Test2 t3(12); 
    return 0;
} 

 

参考文档:https://blog.csdn.net/qq_35524916/article/details/58178072

标签:Test1,Test2,int,explicit,C++,用法,num,构造函数
From: https://www.cnblogs.com/xzit201802/p/17113153.html

相关文章

  • C++匿名函数
    #include<iostream>std::stringaaa="111";intmain(){//[]称为lambda捕获列表,它的含义为:告诉编译器需要在匿名函数内部使用外部的变量。捕获列表中的内容......
  • 学习C++第五天
    今日主要学习指针和结构体,并对前几天的知识进行一个测试总结指针和结构体#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//intmain()//{// inta=10;//a在内存......
  • 趣学前端 | box-shadow的多重用法
    背景我身边一些非互联网技术从业的朋友,偶尔看我转发到朋友圈的文章,会表示出一定的兴趣。前段时间,有朋友问我公众号的问题,所以我来了灵感,准备写一个趣学前端系列,适用于零基础......
  • 通过写登录接口来解释action的用法
    目录通过写登录接口来解释action的用法一、路由二、表模型三、视图类通过写登录接口来解释action的用法一、路由fromdjango.contribimportadminfromdjango.urlsim......
  • c++ 可以检测线程是否销毁的thread_guard
    #include<bits/stdc++.h>usingnamespacestd;constintN=1e6+1e2,Q=N;usingll=longlong;intn,q;lla[N];intsta[N];structq_t{ intl,r;}que[Q......
  • C++ 调用 Python 总结(一)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • C++11 中运行代码块耗时的方法以及坑(chrono 方法)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • 关于C++ 多态实现技术的深度解析(vfptr,vftable)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • GCC&&G++ C && C++ 内嵌汇编和调用汇编函数的方法(x86,ARM自己对照改)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • react实战笔记120:使用fetch用法2
    使用fetch发送请求  数据获取......