首页 > 编程语言 >c++ explicit关键字

c++ explicit关键字

时间:2023-06-03 22:34:14浏览次数:35  
标签:类型转换 函数 explicit c++ 关键字 隐式 构造函数

  • explicit关键字用于修饰单参数构造函数(因为无参数构造函数和多参数构造函数总是显式调用,这种情况在构造函数前面加explicit毫无意义)和转换函数,用于禁止隐式类型转换
    • 作用是防止编译器在某些情况下自动执行隐式类型转换,以提高代码的明确性和安全性
class A{
public:
    A(int a){
        cout<<"a";
    }
};


int main(){
    A a1 = 2;
}
  • 上述代码是可以编译正确的,下面这个加上explicit之后,则禁止这种隐式转换,因此会报一个编译错误
class A{
public:
    explicit A(int a){
        cout<<"a";
    }
};


int main(){
    A a1 = 2;
}
  • explicit只能用于类内的构造函数和转换函数,不能用于全局函数或非成员函数
  • 除非有一个好理由允许构造函数被用于隐式类型转换,否则应该尽量声明为explicit

标签:类型转换,函数,explicit,c++,关键字,隐式,构造函数
From: https://www.cnblogs.com/sunjianzhao/p/17454780.html

相关文章

  • c++进行map数据横向合并
    请帮我写一段代码。nlohmann::json怎么把三个字典合并到一起,c++14标准,并且每个字典的长度不一样,原数据不是json。例如:data1=[{"key1":"a1","key2":1},{"key1":"a2","key2":2}]data2=[{"key3":"b1",},{"key3&......
  • c++ volatile关键字
    volatile是关键字,用来修饰变量作用禁止编译器对变量的优化编译器在优化代码时,会对变量的读取和写入进行优化,例如将变量从内存加载到寄存器中进行操作,以提高执行效率,但是对于volatile修饰的变量,编译器不能进行这些优化,以确保对变量的每次读写操作都是直接从内存中进行的一......
  • c++ 左值和右值以及左值引用和右值引用
    无法令引用重新绑定到另一个对象上,因此引用必须初始化,引用并非对象,只是为一个已经存在的对象所起的另外一个名字因为引用本身不是一个对象,所以不能定义引用的引用inta=10;int&b=a;int&c=b;//此时c不是引用的引用,而是bc都是a的引用判断某个表达式是左值还......
  • 第十届蓝桥杯c++b组国赛题解(还在持续更新中...)
    试题A:平方序列解题思路:直接枚举一遍x的取值,然后按照题目给定的式子算出y,每次取x+y的最小值即可答案为7020代码实现:#include<iostream>#include<algorithm>#include<cmath>usingnamespacestd;#defineintlonglongconstintN=1e4+5;signedmain(){ //记录答案......
  • Effective Modern C++(一)
    通用引用与右值引用我们以T&&的形式声明一个右值引用,但并不是所有形如T&&形式的声明都为右值引用,他还有可能是一个万能引用。事实上,“T&&”有两种不同的意思。第一种,当然是右值引用。这种引用表现得正如你所期待的那样:它们只绑定到右值上,并且它们主要的存在原因就是为了......
  • 6.3测试题以及参考答案(C++基础)
    测试题总分120,时间180分钟一、单选题(每题2分,共40分)C++中表示大于等于用以下哪个关系运算符(B)A.>B.>=C.≥D.>&=C++中,不等于用以下哪个关系运算符(C)A.<>B.≠C.!=D.==表达式7%2的值是多少(B)A.0B.1C.2D.-1要计算变量B的......
  • 理解C++底层细节
    理解C++底层细节C++是一门广泛使用的高级编程语言,其语法优雅且易于使用,拥有着强大的面向对象特性以及丰富的标准库。但是,在理解C++的本质之前,我们需要先了解C++的底层细节。C++中的内存管理在C++中,内存管理和分配是至关重要的内容。常见的内存管理问题包括内存泄漏、内存溢出和野指......
  • 1. C++编程简介
    勿在浮沙筑高台课程:C++面向对象程序设计。面向对象,它是一个观念。那么我们要用这种观念来写程序,需要面向对象的语言,而C++就是一个支持面向对象观念的一种语言。上这门课你该具备什么样的基础呢?只要你有这些基础就够了,你曾经学过某一种procedurelanguage,最好是C语言,但是......
  • volatile 关键字
    一、volatile关键字的适用与不适用场景1.什么是volatilevolatile是一种同步机制,类似于Lock和Synchronized,但是他更轻量级,因为使用volatile并不会发生上下文切换等开销很大的行为。如果一个变量被volatile修饰,那么JVM会认为这个变量可能会被并发修改,会保证关于这个变......
  • synchronized 关键字
    1.synchronized关键字的作用synchronized关键字解决的是多个线程之间访问资源的同步性,用于保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。2.作用范围修饰代码块:大括号括起来的代码,作用于调用的对象。修饰方法:整个方法,作用于调用的对象。修饰静......