zoukankan      html  css  js  c++  java
  • 《C++ Primer》笔记C++变量初始化

    这里说的直接初始化以前没用过,或者是忘记了:

    C++ 支持两种初始化变量的形式:复制 初始化和直接初始化。复制初始化语法用等号(=),直接初始化则是把初始化 式放在括号中:

          int ival(1024);     // direct-initialization
          int ival = 1024;    // copy-initialization
    

    这两种情形中,ival 都被初始化为 1024。 

    在 C++ 中理解 “初始化不是赋值”是必要的。初始化指创建变量并给它赋初 始值,而赋值则是擦除对象的当前值并用新值代替。 当初始化类类型对象时,复制初始化和直接初始化之间的差别是很微妙的。我们在第十三章再详细解释它们之间的差别。现在我们只需知道,直接初始化语法更灵活且效率更高。

    类对象初始化:

    string 类定义了几个构造函数,使得我们可以用不同的方式初始化 string 对象。其中一种初始化 string 对象的方式是作为字符串字面值的副本:

          #include <string>
    

    // alternative ways to initialize string from a character string literal

          std::string titleA = "C++ Primer, 4th Ed.";
          std::string titleB("C++ Primer, 4th Ed.");
    

    本例中,两种初始化方式都可以使用。两种定义都创建了一个 string 对象, 其初始值都是指定的字符串字面值的副本。

    也可以通过一个计数器和一个字符初始化 string 对象。这样创建的对象包 含重复多次的指定字符,重复次数由计数器指定:

          std::string all_nines(10, '9');   // all_nines= "9999999999"
    

    本例中,初始化 all_nines 的唯一方法是直接初始化。有多个初始化式时 不能使用复制初始化。 

    类通过定义一个或多个构造 函数来控制类对象的初始化 。

    如果定义某个类的变量时没有提供初始化式,这个类也可以定义初始化时的 操作。它是通过定义一个特殊的构造函数即默认构造函数来实现的。这个构造函 数之所以被称作默认构造函数,是因为它是“默认”运行的。如果没有提供初始 化式,那么就会使用默认构造函数。不管变量在哪里定义,默认构造函数都会被 使用。 

    例如,string 类定义了默认构造函 数来初始化 string 变量为空字符串,即没有字符的字符串: 

    std::string empty;  // empty is the empty string; empty =""
    

    变量初始化规则 :

    内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变 量都初始化成 0,在函数体里定义的内置类型变量不进行自动初始化。除了用作 赋值操作符的左操作数,未初始化变量用作任何其他用途都是没有定义的。未初 始化变量引起的错误难于发现。正如我们在第 2.2 节劝告的,永远不要依赖未 定义行为。 

    警告:未初始化的变量引起运行问题
    
    使用未初始化的变量是常见的程序错误,通常也是难以发现的错误。
    

    建议每个内置类型的对象都要初始化。虽然这样做并不 总是必需的,但是会更加容易和安全,除非你确定忽略 初始化式不会带来风险。 

  • 相关阅读:
    PLSQL集合类型的使用总结
    户外品牌
    tensorflow学习资源
    sessionState详解
    easyui textbox 添加 onblur 失去焦点事件
    Android 只开启一个Activity实例
    SQL语句生成指定范围内随机数
    sql server 字符串转成日期格式
    调用WebServices超时
    adb install INSTALL_FAILED_ALREADY_EXISTS
  • 原文地址:https://www.cnblogs.com/worldtraveler/p/2835102.html
Copyright © 2011-2022 走看看