当前位置: 代码迷 >> 综合 >> c++中的explicit与隐式转换注意事项(错误代码:conversion from ‘int‘ to non-scalar type ‘Date‘ requested)
  详细解决方案

c++中的explicit与隐式转换注意事项(错误代码:conversion from ‘int‘ to non-scalar type ‘Date‘ requested)

热度:98   发布时间:2023-11-22 12:12:54.0

“类名 对象名 = 传参” 有两个含义:
1.隐式转换
2.赋值

## 先定义一个类,后续以此类作讲解

class 类名
{
    
private:int num;
public:类名 (int n):num(n)         //有参构造,并把传入的n赋值类num{
        }....
}

隐式转换含义

c++中,对类定义对象,并向有参构造函数传参时,
若以下式写法:

int main(int argc,int* argv)
{
    类名  对象名  = 10;赋值  
}

此程序中: 类名 对象名 = 赋值 自动隐式转换
等价为:

类名 对象名 (10);

即:

类名  对象名  = 赋值;等价于
类名  对象名  (赋值);即为隐式转换

防止隐式转换explicit

class 类名
{
    
private:int num;
public:explicit  类名 (int n):num(n)        {
        }....
}

则无法隐式转换
若依然用上述程序:

类名  对象名  = 赋值;

则:无法找到相应的格式
在这里插**入图片描述

类中格式是:

类名(传参类型 传参)

主函数传参格式应该为:

类名  对象名(传参)

无法隐式转换时的错误格式:

类名 对象名  = 传参;   !!错误!!
  相关解决方案