美文网首页C++ 11
006 类内初始值

006 类内初始值

作者: 赵者也 | 来源:发表于2020-02-05 14:57 被阅读0次
class TestInClassInitializer {
public:
    unsigned test_data0 = 0;  // 注意此处
    double test_data1 = 0.1;  // 注意此处
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    TestInClassInitializer test;

    qDebug() << test.test_data0;
    qDebug() << test.test_data1;

    return a.exec();
}

C++11 的类内初始化允许非 static 成员的初始化,可以用{}或=号。
构造函数的初始化列表 与 类内成员初始化 没有谁好谁不好,谁来替代谁,两种方法可相互补充使用。类内初始化有一些好处:
1、当你有多个构造函数时,如果使用初始化列表,每个构造函数都要写一遍,烦人不说,同时产生重复代码,修改易漏。如果把这些成员都用类内初始化,初始化列表就不用再列出它们了。
2、类内初始化,成员之间的顺序是隐式的,会有些便利。如果使用初始化列表,它是有顺序之分的,顺序不对,编译器会警告。
3、对于简单的类或结构,没有构造函数的,可以直接用类内初始化在成员声明的同时直接初始化,方便。

对于一些类类型的成员初始化要小心,如果成员之间有依赖关系,这时使用初始化列表显式的指明这些成员的构造(初始化)顺序是比较稳妥的。

如果成员已经使用了类内初始化,但在构造函数的初始化列表又列出来,编译器以后者优先,类内初始化会被忽略。如果某些成员使用不同构造函数时,会有不同的默认值,这种情况就要用初始化列表。同时,其它成员依然可以使用类内初始化。

类内初始化绝对不是解决什么内置类型默认初始化时未定义问题。面向对象编程一个很重要的原则,程序员有责任要保证对象产生出来,它的每个成员都必须是初始化的,这是设计问题以及基本意识,无论是使用哪种方法初始化。

相关文章

  • 006 类内初始值

    C++11 的类内初始化允许非 static 成员的初始化,可以用{}或=号。构造函数的初始化列表 与 类内成员初...

  • chapter-3

    C++ Primer第三章! //1、使用拷贝初始化时,只能提供一个初始值;2、如果类提供了类内初始值,则只能用拷...

  • (二十五)静态成员

    static定义全局变量 static变量的几个要素 变量声明放在类体(Object.h)大括号内,不能加初始值 ...

  • PHP 类的一些操作

    静态属性 class 类名{ static $属性名 = 初始值; //初始值也可以不写 } 使用静态属性 ...

  • 类和对象

    【在定义类时,类名要首字母大写,如Person在类中可以给字段赋初始值,而在结构体中不可以给字段赋初始值】

  • 说说如何使用 Python 类的属性

    假设有这样的一个 User 类: 1 指定属性默认值 可以在方法 __init__() 内指定属性初始值。这里我们...

  • 视频学习杂记

    类 1.类中的变量,成员变量(全局变量)初始值为0,局部变量不会赋初始值。 2.final关键字的用法使用fina...

  • Swift枚举,结构体和类的构造器详解

    1.设置存储属性的初始值 在创建类或结构实例时,类和结构必须为所有存储属性设置初始值。存储属性不能保留在不确定的状...

  • Gson 解析初始值被覆盖的问题

    1 通过data class 创建的类 使用Gson解析 设置的初始值没有起效果创建初始值使用常规的class 就可以

  • 006_类的定义和声明。

    namespace _006_类的定义和声明 { class Program { static voi...

网友评论

    本文标题:006 类内初始值

    本文链接:https://www.haomeiwen.com/subject/guvieqtx.html