首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++初始值设定项列表成员是否仍在调用默认构造函数?

C++初始值设定项列表成员是否仍在调用默认构造函数?

在C++中,初始值设定项列表用于在对象创建时为成员变量提供初始值。对于类的成员变量,如果在初始值设定项列表中提供了初始值,那么该成员变量将使用提供的值进行初始化,而不是调用默认构造函数。

如果在初始值设定项列表中没有为成员变量提供初始值,那么该成员变量将调用默认构造函数进行初始化。默认构造函数是一个无参构造函数,如果没有显式定义,默认构造函数会被编译器自动生成。

需要注意的是,如果一个类没有定义默认构造函数,或者默认构造函数是私有的,那么在初始值设定项列表中没有为成员变量提供初始值将导致编译错误。

以下是一个示例代码,展示了初始值设定项列表的使用:

代码语言:txt
复制
class MyClass {
public:
    int num;
    std::string str;

    // 构造函数
    MyClass(int n, const std::string& s) : num(n), str(s) {
        // 初始值设定项列表中为成员变量提供初始值
    }
};

int main() {
    MyClass obj(10, "Hello");
    // obj.num 的初始值为 10
    // obj.str 的初始值为 "Hello"
    return 0;
}

在上述示例中,MyClass类的构造函数使用初始值设定项列表为成员变量num和str提供了初始值。因此,当创建MyClass对象obj时,num的初始值为10,str的初始值为"Hello"。

对于C++中的初始值设定项列表,腾讯云并没有提供特定的产品或服务与之直接相关。然而,腾讯云提供了丰富的云计算服务,如云服务器、云数据库、云存储等,可以帮助开发者构建和部署各种应用程序。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多相关信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#构造函数的作用_以下程序段的作用是inta

构造函数是一种特殊的成员函数,它主要用于为对象分配存储空间,对数据成员进行初始化 (1)构造函数的名字必须与类同名; (2)构造函数没有返回类型,它可以带参数,也可以不带参数; (3)构造函数的主要作用是完成对类的初始化工作...实例构造函数又分为默认构造函数和非默认构造函数,注意一旦类有了自己的构造函数,无论是有参数还是没有参数,默认构造函数都将无效,而且仅仅声名一个类而不实例化它,则不会调用构造函数。...类的静态构造函数在给定应用程序域中至多执行一次,只有创建类的实例或者引用类的任何静态成员才激发,不能带又参数; (4)静态构造函数是不可继承的,而且不能被直接调用;       (5)...如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行.任何带有初始值设定的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定; ...(6)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数; 一个类可以同时拥有实例构造函数和静态构造函数,这是惟一可以具有相同参数列表的同名方法共存的情况

64710

C++笔记——类(0)定义、访问控制、友元、default、mutable、构造函数

定义格式、访问控制 C++里面定义类的关键词有两个,一个是class,另一个是struct,他们基本没有区别,除了成员变量的默认属性。...构造函数 其实默认情况下,如果你没有专门定义另外的构造函数的话,编译器会默认生成一个默认构造函数给你定义的类,来初始化类里面的变量。...class ex{ private: int a; int b; float c; }; 构造函数就是和类同名且没有返回值的函数,在用类创建对象的时候就会调用构造函数来给对象赋初始值...这个构造函数可以完全等同于之前我们提到的合成默认构造函数(即什么都不写的时候编译器自动加上的默认构造函数)。...const的时候只能够通过初始值列表来给成员变量一个值(因为通过初始值列表来指定值的操作是初始化成员变量的值,而不是赋值,const其实做的就是禁止赋值操作)。

47320

C++类和对象】初始化列表与隐式类型转换

关键字使用 3.结语 1.初始化列表 1.1初始化列表定义 C++中的初始化列表是一种在对象构造函数中初始化成员变量的方法。...虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化,构造函数体中的语句只能将其称为赋初值,而不能称作初始化。...在构造函数体内,不需要再使用赋值语句来初始化这些成员变量。 使用初始化列表可以提高代码执行效率,特别是在成员变量为对象类型时,可以避免多次调用默认构造函数和拷贝构造函数。...1.2初始化列表原因 在C++类和对象中有些成员变量必须定义的时候初始化,这时候如果只是简单的使用构造函数来赋值是不可行的,所以C++引入了初始化列表这个概念; 类中包含以下成员,必须放在初始化列表位置进行初始化...没有默认构造函数的类类型成员变量_aobj:如果成员变量是一个类类型的对象,并且该类没有默认构造函数(无参构造函数),则必须在初始化列表调用该类的有参构造函数进行初始化。

9910

C++构造函数初始化列表 ① ( 类对象作为成员变量时的构造函数问题 | 构造函数初始化列表语法规则 )

; 此时使用 默认无参构造函数 初始化 B , 就会报错 ; 在一个类中 , 其成员变量是 带有参构造函数 的类型 , 这种情况下没有调用 有参构造函数的机会 , 此时就会出现 编译报错情况 ; 在下面的代码中...========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ========== 二、构造函数初始化列表 ---- 1、构造函数初始化列表语法规则 在 C++ 语言中 , 构造函数初始化列表...是一种用于初始化类的成员变量的方法 ; 构造函数初始化列表 可实现功能 : 为成员变量提供初始值 调用其他 成员变量的 构造函数 来初始化成员变量 构造函数初始化列表语法规则 : 构造函数() : 成员变量名称...初始化列表中的元素由 成员变量的名称 和 初始值组成 , 使用等号 = 连接 ; 在下面的代码中 , 为 B 类定义了默认构造函数 , 其中定义了 构造函数 初始化列表 ; 在 初始化列表中 , m_age...(10) 是 为 m_age 提供了初始值 ; m_a(10, 150) 是 调用了 A 的有参构造函数 ; 代码示例 : class B { public: B() : m_age(10) , m_a

48530

C++中五花八门的初始化规则

Tips:C不允许用户自定义默认值从而提高性能(增加函数调用的代价),C++默认也不做初始化从而提高性能,但是C++提供了构造函数让用户显式设置默认初始值。...类类型的默认初始化 定义一个类变量但是没有指定初始值时,会使用默认构造函数来初始化,所以没有默认构造函数的类不能执行默认初始化。...,如果没有在构造函数初始值列表中显式地初始化数据成员,那么成员将在构造函数体之前执行默认初始化,例如: // 通过构造函数初始值列表初始化数据成员: 数据成员通过提供的初始值进行初始化 class Cat...数组的默认初始化 如果定义数组时提供了初始值列表,那么未定义的元素若是内置类型或者有合成的默认构造则会先进行零初始化,如果元素是类类型,再执行默认构造函数 如果定义数组时未提供初始化列表,则每个元素执行默认初始化...内置类型的值初始化(不推荐) 对于类类型而言,不指定初始值下会调用它的默认构造函数,因此不存在默认初始化和值初始化的区别。

2.5K10

c++】类和对象(六)深入了解隐式类型转换

1.初始化列表 1.1构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值 class Date { public: Date(int year, int month..._year、_month、和_day这三个成员变量,它们仍然会在初始化列表阶段被默认初始化,然后在构造函数体内被赋新的值 对于基本类型(如int),如果它们未在类的初始化列表中显式初始化,则它们会进行默认初始化...而_year、_month、和_day虽然没有在初始化列表中被显式赋值,但它们会在构造函数体开始执行前完成默认初始化(对于基本数据类型,这意味着它们的初始值是未定义的)。...在C++中,如果一个类的构造函数只需要一个参数(或所有参数除了第一个外都有默认值),那么这个构造函数允许从构造函数参数类型到类类型的隐式转换。...虽然看起来像是将整数2赋值给cc2,实际上C++编译器解释为使用2作为参数调用C类的构造函数来初始化cc2。这是因为C(int x)构造函数允许从int到C的隐式转换。

11310

C++初阶】—— 类和对象 (下)

前言:类的6个默认成员函数,我们了解三个,讲完剩下的成员函数,其实类和对象的大致内容已经结束,最后我们在了解一些C++类和对象的剩下的的细节,我们就正式结束类和对象 如果你还对前面三个默认成员函数不太了解...初始化列表 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值 对象中有了一个初始值,因此构造函数体中的语句只能将其称为赋初值,而不能称作初始化。...因为初始化只能初始化一次,而构造函数体内可以多次赋值 初始化列表的概念 初始化列表: 以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式 Date(...使用初始化列表时注意: 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(且该类没有默认构造函数时...尽量使用初始化列表初始化 因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先经过初始化列表初始化 2.

4810

C语言与C++面试知识总结

,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。...成员初始化列表 好处 更高效:少了一次调用默认构造函数的过程。...有些场合必须要用初始化列表: 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 没有默认构造函数的类类型...,因为使用初始化列表可以不必调用默认构造函数来初始化 initializer_list 列表初始化 用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list...注意: 普通函数(非类成员函数)不能是虚函数 静态函数(static)不能是虚函数 构造函数不能是虚函数(因为在调用构造函数时,虚表指针并没有在对象的内存空间中,必须要构造函数调用完成后才会形成虚表指针

4.9K41

什么?CC++面试过不了?因为你还没看过这个!

,如果有初始值就用初始值初始化它,如果没有初始值系统用默认值初始化它。...成员初始化列表 好处 更高效:少了一次调用默认构造函数的过程。...有些场合必须要用初始化列表: 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 没有默认构造函数的类类型...,因为使用初始化列表可以不必调用默认构造函数来初始化 initializer_list 列表初始化 用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list...注意: 普通函数(非类成员函数)不能是虚函数 静态函数(static)不能是虚函数 构造函数不能是虚函数(因为在调用构造函数时,虚表指针并没有在对象的内存空间中,必须要构造函数调用完成后才会形成虚表指针

3.6K50

当类构造与析构的时候...

关于虚函数部分不在这篇再提,上一篇提过了。 文章目录 什么时候会调用默认构造函数 什么时候调用拷贝构造函数? 什么时候调用赋值运算符? 深拷贝与浅拷贝 成员初始化列表的概念,为什么用它会快一些?...有哪些情况必须用到成员列表初始化? 构造/析构函数的执行顺序 继承机制中对象之间如何转换? C++中类成员的访问权限和继承权限问题 如何禁止程序自动生成拷贝构造函数?...C++中struct和class的区别 什么时候会调用默认构造函数 1、当不使用任何初始值定义一个类的非静态变量时,会调用该类的默认构造函数。...调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。...1、初始化一个const成员 2、调用基类构造函数时的传参 3、初始化不存在默认构造函数的别的类的对象 ---- 构造/析构函数的执行顺序 构造的时候:如果基类,先调用基类的构造函数,再调用自己的构造函数

62120

【笔记】《C++Primer》—— 第18章:用于大型程序的工具

标准库类型都保证自己的析构不会抛出异常 异常自然也可能在构造函数出现,如果我们在构造函数体中初始化成员自然可以用try-catch处理,但是初始值列表在返回之外,为了处理初始值列表的异常我们需要用函数try...语句块形式,也就是在构造函数初始值列表冒号后面用try-catch将整个列表函数体包住,这样就可以处理构造函数开始执行后发生的所有异常了。...要注意的是基类的构造顺序是与派生列表中基类的出现顺序一致,与派生类参数顺序无关 C11中允许派生类从多个基类中继承构造函数,但是如果多个构造函数都相同的话将产生错误,此时派生类应该自己定义一个构造函数来覆盖它们...析构函数调用顺序与构造顺序相反的特性仍在 合成拷贝移动等操作的规则也与之前一致 我们可以用基类指针指向派生类对象,但是调用对应函数的时候编译器不会觉得不同方向的转换有好坏之分,因此当有多个接受不同基类参数但名字相同的函数时...C++通过虚继承来解决这个问题,我们可以将某个类在继承的时候声明为虚基类,方法是在继承的派生列表中对应前面加上virtual,这样处理后无论这个目标类被间接继承多少次,这个基类成员都只会出现一次,此时的派生称为虚派生

94620

c++ 中,内层作用域中的同名成员会覆盖外层,当函数内部或者类内部定义了与全局作用域相同的变量时,要使用全局作用域中的变量可以使用:: 类构造函数相关 在构造函数中初始化列表相当于先定义再赋值,而要做到对成员变量定义的同时初始化...,可以使用初始值列表的形式 在某些场合下初始值列表必不可少:初始化const成员或者引用成员 构造函数初始值列表只说明用于初始化成员的值,而不限定初始化的具体执行顺序 成员的初始化顺序与他们在类中定义的顺序一致...构造函数初始值列表初始值的前后位置关系不会影响实际的初始化顺序 最好令构造函数初始值的顺序与成员声明的顺序保持一致。...它们不包含this指针,静态函数成员不能被声明成const类型,也不能在静态函数成员调用非类的静态成员 不能在类的内部初始化类的静态成员,static关键字只能出现在类内部声明语句中,定义的时候不能加...Menu* me2; Menu& me3; }; +END_SRC 另外我们可是用静态成员成员函数默认实参 ----

58710

C++】‘类与对象‘-三部曲——(4)(23)

类中的函数默认是内联函数,具体是否是内联函数编译器会判断。...: (不传参就可以调用构造函数的主要任务是初始化对象,如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义,编译器将不再生成。...默认析构函数:与默认构造函数类似,编译器对内置类型成员不做处理,对自定义类型会去调用它的析构函数。 一.什么时候需要自己写析构函数?...一.初始化列表构造函数的关系 引入:构造函数调用之后,对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化, 构造函数体中的语句只能将其称为赋初值,而不能称作初始化。...二.初始化列表基本结构 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。

13110

C++初阶-类和对象下

C++类和对象最终之章 零、前言 一、再谈构造函数 1、构造函数体赋值 2、初始化列表 3、explicit关键字 二、static成员 三、C++11 新式成员初始化 四、友元 1、友元函数 2、友元类...五、内部类 六、再次理解封装 七、再次理解面向对象 零、前言 本章为C++类和对象的最后一章,将类和对象的知识进一步学习和掌握 一、再谈构造函数 1、构造函数体赋值 在创建对象时,编译器通过调用构造函数...(初始化只能初始化一次) 示图: 类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 const成员变量 自定义类型成员(该类没有默认构造函数) 注:我们都知道创建引用变量和...const变量是必须初始化的,对于类来说,其引用变量和const变量成员必须在初始化列表进行初始化 示例: class A { public: A(int a,int b)//是构造函数,但不是默认构造函数...,又有默认构造函数(初始化列表函数体赋值)时,对象创建时会先走初始化列表,再走函数体赋值,最后走成员缺省值 四、友元 友元分为:友元函数和友元类 概念: 友元提供了一种突破类域封装的方式,有时提供了便利

35130

C++常见的面试知识点

static 作用 1,修饰普通变量,修改变量的存储区域和生命周期,使变量存储在静态区,在main函数运行钱就分配了空间,如果有初始值就用初始值初始化它,如果没有就用默认的值初始化。...2,当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时。都隐式的使用this指针。...inline函数的改变需要重新编译,不像 non-inline 可以直接链接。是否内联,程序员不可控。内联函数只是对编译器的建议,是否函数内联,决定权在于编译器。...#pragma pack(n) 设定结构体、联合以及类成员变量以 n 字节方式对齐 extern "C" 被 extern 限定的函数或变量是 extern 类型的 被 extern "C" 修饰的变量和函数是按照...联合有如下特点: 默认访问控制符为 public 可以含有构造函数、析构函数 不能含有引用类型的成员 不能继承自其他类,不能作为基类 不能含有虚函数

73521

【笔记】《C++Primer》—— 第四部分:高级主题(完)

类似array,定义的时候模板参数是这个bitset的位数 整型值作为初始值,没有内容的部分会置0,超长的部分会截断 regex的核心是判断是否匹配的函数regex_match,搜索第一个匹配串的函数regex_search...return, 因此我们最好将其放在某部分的最后一条语句中 和return相同,我们也不该抛出指向局部对象的指针 在构造函数初始值列表冒号后面用try-catch将整个列表函数体包住,这样就可以处理构造函数开始执行后发生的所有异常了...,因此最好我们调用基类函数时也要特指 可以将某个类在继承的时候声明为虚基类,方法是在继承的派生列表中对应前面加上virtual,这样处理后无论这个目标类被间接继承多少次,这个基类成员都只会出现一次,此时的派生称为虚派生...,避免了名称冲突的问题 限定作用域的枚举成员默认类型是int,不限定作用域的枚举成员则没有默认类型,我们只能知道其类型足够容纳其初始值。...多重声明可以包括头文件,而且链接指示可以嵌套 我们也可以对一个有C++定义的函数标记链接指示,这样会使得这个函数可以被目标语言调用

86410

C++基础构造函数(constructor)

构造函数定义 C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数构造函数在定义时可以有参数;但是是没有任何返回类型的声明。...构造函数语法 class 类名 { public: 类名(参数列表) { 函数体 } private: 数据成员 }; 构造函数的特点: 函数名称就是当前的类名称。...构造函数没有返回值 构造函数调用 显示调用构造函数 Student studentOne = Student("st1",20); 隐式调用构造函数 Student studentTwo("st2",...,因为系统默认的无参构造函数没有给成员属性提供初始值,而是会随机分配初始值,因此通常自定义的无参构造函数会对类中的数据进行初始值。...通过初始化列表实现构造参数,就是在参数列表的后面加冒号“:” Student(string s_Name):s_Name(s_Name){} 默认参数得构造函数 默认参数的构造函数 需要防止调用的二义性

47730

《C++Primer》第七章 类

无论何时只要类的对象被创建,就会执行构造函数默认构造函数:如果存在类内的初始值,则用它初始化成员;不存在的话执行默认初始化。...编译器可能不能为某些类合成默认构造函数:如果类中包含一个其他类类型的成员并且这个成员的类型没有默认构造函数,那么编译器无法初始化该成员。...构造函数初始值列表 // 一般的构造函数写法: 是用初始值列表 Sales_data(const std::string &s, unsigned n, double p) : bookNo(s),...成员初始化的顺序 构造函数初始值列表只说明用于初始化成员的值,而不限定初始化的具体执行顺序,成员初始化顺序和它们在类定义中出现的顺序一致。...默认初始化的发生条件: 我们在块作用域中不使用任何初始值定义一个非静态变量或者数组时 当一个类本身含有类类型的成员且使用合成的默认构造函数时 当类类型的成员没有在构造函数初始值列表中显式地初始化时 值初始化的发生条件

53720
领券