C++不同类型转换--2

简介: C++不同类型转换--2

C++不同类型转换--1https://developer.aliyun.com/article/1424634

explicit关键字:



       explicit关键字可以防止自定义类型中构造函数的隐式类型转换。因为自定义类型的隐式转换发生在构造函数中,所以只需用 explicit 修饰构造函数防止这种转换。


class Date
{
public:
    explicit Date(int year = 2023, int month = 10, int day = 16)
        : _year(year)
        , _month(month)
        , _day(day)
    {    }
private:
    int _year;
    int _month;
    int _day;
};
int main()
{
    //有了关键字explicit,下面的转换都不能实现
    //Date d1 = 5;
    //Date d2 = { 1,2,3 };
    //Date d3 = (1, 2, 3);
    Date d1(5);//类似于此种的方式没有设计隐式类型的转换,可以使用
    return 0;
}


强制类型转换:


       强制类型转换的效果比较强,explicit关键字限制不了强制类型转换。这里要说明的是强制类型转换必须跟一个表达式,因此,强制类型转换只能完成一个参数的转换。


#include <iostream>
using namespace std;
class Date
{
public:
  explicit Date(int year = 2023, int month = 10, int day = 16)
  : _year(year)
  , _month(month)
  , _day(day)
  { }
  void Print() {
  cout << _year << "/" << _month << "/" << _day << endl;
  }
private:
  int _year;
  int _month;
相关文章
|
5月前
|
安全 编译器 程序员
【C++】C++的类型转换
【C++】C++的类型转换
|
5月前
|
设计模式 安全 算法
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
【C/C++ 类型转换 】深入理解C++向上转型:从基础到应用
195 0
|
17天前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
15 1
|
19天前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
24 3
|
19天前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
40 3
|
5月前
|
存储 安全 编译器
C++:现代类型转换
C++:现代类型转换
45 5
|
17天前
|
C++
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
C++入门4——类与对象3-2(构造函数的类型转换和友元详解)
17 0
|
3月前
|
存储 安全 编译器
【C++11】类型转换
【C++11】类型转换
18 0
|
3月前
|
安全 程序员 编译器
C++一分钟之-C++中的类型转换
【7月更文挑战第8天】C++中的类型转换涉及隐式和显式操作,隐式转换如从`int`到`double`是自动的,但可能导致数据丢失。显式转换包括`static_cast`, `dynamic_cast`, `const_cast`, `reinterpret_cast`,以及转换构造函数。要避免数据丢失、类型不匹配和运行时错误,需谨慎使用显式转换并检查结果。过度使用`reinterpret_cast`应避免。理解这些转换有助于编写更安全的代码。
31 0
|
5月前
|
安全 程序员 C语言
从C语言到C++_37(特殊类设计和C++类型转换)单例模式(下)
从C语言到C++_37(特殊类设计和C++类型转换)单例模式
49 5