首页 > 编程语言 >C++知识点

C++知识点

时间:2024-06-04 15:35:25浏览次数:22  
标签:知识点 int 构造 关键字 编译器 C++ year Date

explicit关键字

explicit关键字
explicit关键字
在理解 explicit 关键字 之前,我们必须要了解构造函数的类型转换作用,以便于我们更好的理解 explicit 关键字 ,如果有不懂构造函数,可以来看看这篇文章:构造函数

点击查看代码
class Date
{
 public:
// 构造函数
    Date(int year)
:_year(year)   
    {
 	}
 
private:
    int _year;
    int _month = 3;
    int _day = 31;
}

在C++中,仅仅在类的定义内部(即在类的大括号{}内)声明并定义成员函数,并不意味着该函数自动成为内联函数。然而,通常我们倾向于将这样的成员函数视为内联的候选者,因为编译器在处理它们时会有更高的可能性进行内联展开。
要使函数真正成为内联的,你可以在函数声明前使用inline关键字。然而,在类定义内部定义的成员函数,即使没有inline关键字,编译器也可能会选择对其进行内联优化,特别是当函数体很小且频繁被调用时。

点击查看代码
class MyClass {
public:  
    MyClass(int value) : data(value) {}  
  
    // 虽然没有使用inline关键字,但编译器可能会选择内联这个函数  
    int getValue() {  
        return data;  
    }  
  
    // 显式地使用inline关键字  
    inline void setValue(int value) {  
        data = value;  
    }  
  
private:  
    int data;  
};
  • 对于下面的 d1 很清楚一定是调用了有参构造进行初始化,不过对于 d2 来说,也是一种构造方式
点击查看代码
int main()
{
    // d1 和 d2 都会调用构造函数
    Date d1(2022);   
 
    Date d2 = 2023;
    
    return 0;
}
  • 在引用详解,我有提到过【隐式类型转换】这个概念,像下面将一个int类型的数值赋值给到一个double类型的数据,此时就会产生一个隐式类型转换
    int i = 1;
    double d = i;

  • 对于类型转换而言,这里并不是将值直接赋值给到左边的对象,而是在中间呢会产生一个临时变量,例如右边的这个 i 会先去构造一个临时变量,这个临时变量的类型是 [double] 。把它里面的值初始化为 1,然后再通过这个临时对象进行拷贝构造给d,这就是编译器会做的一件事

  • 那对于这个 d2 其实也是一样,2023会先去构造一个临时对象,这个临时对象的类型是[Date]把它里面的year初始化为2023,然后再通过这个临时对象进行拷贝构造给到d2,

点击查看代码
//拷贝构造
Date(const Date& d)
    :_year(d._year)
,_month(d._month)
,_day(d._day)
{
    
}

【拷贝构造】也是属于构造函数的一种哦,也是会有初始化列表的
编译器在这里地方做了一个优化,将【构造 + 拷贝构造】优化成了【一个构造】,因为编译器在这里觉得构造再加拷贝构造太费事了,干脆就合二为一了。其实对于这里的优化不同编译器是有区别的,像一下VC++、DevC++可能就不会去优化,越是新的编译器越可能去进行这种优化。
怎么知道中间赋值这一块产生了临时对象呢?如果不清楚编译器的优化机制这一块肯定就会认为这里只有一个构造?
Date& d3 = 2024;
报错

标签:知识点,int,构造,关键字,编译器,C++,year,Date
From: https://www.cnblogs.com/lichenglin1023/p/18230844

相关文章

  • 华为OD机试2024年最新题库(Python、JAVA、C、C++合集)C卷+D卷
    介绍博主介绍:CSDN领军人物top1的作者,全网粉丝30w+,文章累计被阅读3800w+,直接帮助200+,间接帮助800+同学进入od添加或私信博主免费获取本题解析以及代码24年5月份开始,考的都是OD统一考试(D卷),题库已经整理好了,命中率95%以上。5-10月份考的都是D卷真题,都是原题,圈内有多种......
  • 统计学知识点
    一、选择题。1.对50名联工的工资收入情况进行调查,则总体单位是()A.50名职工B.50名职工的工资总额C.每一名职工 D.每一名职工的工资2.按调查对象包括的范围不同,统计调查可以分为()。①全面调查②抽样调查③非全面调查A①②③        B①③      ......
  • C++ 强制类型转换运算符简介
    C++提供了四种强制类型转换运算符:static_cast、reinterpret_cast、const_cast和dynamic_cast。这些运算符各自具有特定的用途,适用于不同的类型转换需求。本文将详细介绍这四种运算符及其应用场景,并讨论它们在向上转换中的使用方法。1.static_caststatic_cast用于在编译时执......
  • C++ Builder 2010 绘制坐标
     一、步骤:1.先确定Image的位置,大小(可以不写)          2.设置初始面板,绘制初始的x,y坐标轴          3.画x,y向的刻度线,标刻x,y轴刻度          4.获取数据(可以不写)          5.将数......
  • 如何选择实名认证接口?C++身份证二、三要素实名认证接口提供厂商
    线上平台进行身份证实名认证,有助于保障交易的安全性,防止身份信息被盗用的风险,其主要应用于金融、在线银行、支付平台、社交媒体、账号注册、内容发布等多种应用场景。那么,又当如何选择实名认证接口厂家呢?翔云人工智能开放平台专注于API接口的提供,为有需要的企业提供了便......
  • C++发票查验真假的接口厂家有哪些?数电票、医疗票据查验
    现如今,随着数字化应用的不断普及,财务工作也在不断的由人工向数字化转型。企业财务进行数字化转型,能够推动财务管理职能的转型升级,通过运用云计算、大数据等技术,重构财务组合和业务流程,实现业财融合,提升会计信息质量、工作效率、合规程度及价值创造能力。翔云人工智能开放......
  • C++发票查验真假的接口厂家有哪些?数电票、医疗票据查验
    现如今,随着数字化应用的不断普及,财务工作也在不断的由人工向数字化转型。企业财务进行数字化转型,能够推动财务管理职能的转型升级,通过运用云计算、大数据等技术,重构财务组合和业务流程,实现业财融合,提升会计信息质量、工作效率、合规程度及价值创造能力。翔云人工智能开放平......
  • C++访问限定符private、public、protected的使用场景
    众所周知,C++中有3种访问符,分别是private、public、protected。其中private和public比较好理解。private:只能由该类中的函数、其友元函数访问,不能被任何其他访问,更不能由该类的对象在类外进行访问,类成员变量一般修饰为private,防止类使用者不受约束地直接修改数据。public:......
  • C++派生类与继承性
    继承和派生其实都是一回事,只是说法不同罢了。        如:子类继承了父类,父类派生了子类。那么什么是继承呢 首先,如上图所示是一个动物种类区分图。猫和狗都属于动物这一种类,而猫又可以细分为加菲猫、布偶猫等种类。我们发现这些细分出来的单体在拥有上一级别的共性......
  • .NET Core Configuration 配置项知识点一网打尽!
    控制台项目中,演示示例ConsoleAppConfig项目1.自定义 DictionaryConfig 内存字典模式dotnet add package Microsoft.Extensions.ConfigurationIConfigurationBuilder builder = new ConfigurationBuilder();builder.AddInMemoryCollection(new Dictionary<s......