C++类: 构造函数隐式转换及explicit关键字

1. 构造函数的隐式转换

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

  • 构造;

  • 默认且隐含的类型转换操作符。

#include 
struct test
{
public:
    test(bool ii) {};
};
int main()
{
    test x = 1;	   // 隐式转换构造,拷贝初始化
    test y(2);	   // 直接赋值构造
}

2.抑制构造函数的隐式转换 — explicit

有时候我们不希望发生隐式转换,可以通过将构造函数声明为explicit加以阻止。

#include 
struct test
{
public:
    explicit test(bool ii) {};
};
int main()
{
    test x = 1;	   // 【错误】 error: conversion from 'int' to non-scalar type 'test' requested
    test y(2);	   // 【正确】直接赋值构造,初始化
}

注意:

  • explicit构造函数只能用于直接初始化。

  • explicit关键字 只允许出现在类内的构造函数的声明处。

你可能感兴趣的:(C++,c++)