C++中explicit关键字作用

explicit是c++中不太常用的一个关键字,其作用是用于修饰构造函数,告诉编译器定义对象时不做隐式转换。

举例说明:

include <iostream>
include <string>
using namespace std;
class person
{
public:
    person(int age);
    person(int age,string name);
private:
    int age;
    string name;
};

int main(int argc,char* argv)
{
    person p = 23;//此处语法没问题,=>person p = person(23);
    return 0;
}

person::person(int age)
{
    this->age = age;
}
person::person(int age,string name)
{
    this->age = age;
    this->name = name;
}

person p =23;这行代码没任何问题,因为person类中有一个person(int age)构造函数,gcc、cl等编译器会隐式调用此构造函数创建对象。
如果在person(int age)构造函数前加explicit关键字则编译无法通过。

include <iostream>
include <string>
using namespace std;
class person
{
public:
    explicit person(int age);//此处增加explicit关键字
    person(int age,string name);
private:
    int age;
    string name;
};

int main(int argc,char* argv)
{
    person p = 23;
    return 0;
}

person::person(int age)
{
    this->age = age;
}
person::person(int age,string name)
{
    this->age = age;
    this->name = name;
}

编译时g++编译器报:
error: conversion from int' to non-scalar typeperson’ requested

转载于:https://www.cnblogs.com/lanzhi/p/6469031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值