栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++ explicit

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++ explicit

c++ explicit

explicit主要用于指明类的单参构造函数的是显示调用的,而非隐式调用。

那么在这里什么是显示调用,什么是隐式调用呢?

来看一个显式调用的例子

#include

using namespace std;

class A{
public:
    A(double val) : m_val(val){} //一个参数(单参)的构造函数
    double m_val;
};

int main(){
    A a1(3.14); //显示调用一个参数的构造函数

    cout << "a1.m_val = " << a1.m_val << endl;
    cout << "_________________________________________" << endl; 
    system("pause");
    return 0;
}

大多数情况下,我们通过显示调用来对对象进行赋值,不会有问题

但是由于存在隐式转换,下面来看看隐式转换和调用

#include

using namespace std;

class A{
public:
    A(double val) : m_val(val){} //一个参数(单参)的构造函数
    double m_val;
};

int main(){
    A a1(3.14); //显示调用一个参数的构造函数
    A a2 = 2.56;
    cout << "a1.m_val = " << a1.m_val << endl;
    cout << "a2.m_val = " << a2.m_val << endl;
    cout << "_________________________________________" << endl; 
    system("pause");
    return 0;
}

上例中,A a2 = 2.56 就进行了一次隐式转换,转换方式为创建一个临时的对象,再进行赋值

A temp(2.56);
a2 = temp;

explicit关键字可以阻止构造函数的隐式转换,只对:只含有一个参数,或n个参数里面,有n-1个参数是带有默认值的构造函数才有效

error: conversion from ‘double’ to non-scalar type ‘A’ requested

可以看到,在我们添加了explicit关键字后,构造函数就不能再进行隐式转换了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982907.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号