• 《C++ primer》--第三章


    习题3.2 什么是默认构造函数?

    解答:

         默认构造函数就是在没有显示提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化式,就会使用默认构造函数。

        如果用户定义的类中没有显示定义任何构造函数,编译器就会自动为该类生成默认构造函数,称为合成的默认构造函数。

    习题3.3 列举出三种初始化string对象的方法。

    解答:

    1. 不带初始化式,使用默认构造函数初始化string对象。
    2. 使用给一个已存在的string对象作为初始化式,将新创建的string对象初始化为已存在对象的副本。
    3. 使用字符串字面值作为初始化式,将新创建的string对象初始化为字符串字面值的副本。

    习题3.5 解释string类型的输入操作符和getline函数分别如何处理空白字符。

    解答:

    string类型的输入操作符对空白字符的处理:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该空白字符仍留在输入流中)。

    getline函数对空白字符的处理:不忽略行开头的空白字符,读取字符直至遇到换行符,读取终止并丢弃换行符(换行符从输入流中去掉但并不存储在string对象中)。

    习题3.21 何时使用const迭代器?何时使用const_iterator?解释两者的区别?

    • const迭代器是迭代器常量,该迭代器本身的值不能修改,即该迭代器在定义时需要初始化,而且初始化之后,不能再指向其他元素。若需要指向固定元素的迭代器,则可以使用const迭代器。const迭代器这种类型几乎没什么用处:一旦它被初始化后,只能用它来改写其指向的元素,但不能使它指向任何其他元素。
    • const_iterator是一种迭代器类型,对这种类型的迭代器解引用会得到一个指向const对象的引用,即通过这种迭代器访问到得对象是常量。该对象不能修改,因此,const_iterator类型只能用于读取容器内的元素,不能修改元素的值。若只需遍历容器中的元素而无需修改它们,则可以使用const_iterator。

    P103 对指针进行初始化或赋值只能使用以下四种类型的值

    1. 0值常量表达式,例如,在编译时可获得0值的整形const对象或字面值常量0.
    2. 类型匹配的对象的地址。
    3. 另一对象之后的下一地址。
    4. 同类型的另一个有效指针。

    p140 为什么使用前自增操作?

    有使用C语言背景的读者可能会觉得奇怪,为什么要在程序中使用前自增操作。道理很简单:因为前置操作需要做的工作更少,只需加1返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。对于int型对象和指针,编译器可优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。因此,养成使用前置操作这个好习惯,就不必担心性能差异的问题。

    前自增操作和后自增操作都使其操作数加1,二者的区别在于:

    • 前自增操作将修改后操作数的值作为表达式的结果值;
    • 而后自增操作将操作数原来的、未修改的值作为表达式的结果值。

    P154 如果赋值操作的左右操作数类型不同,则右操作数会被转换为左边的类型。

  • 相关阅读:
    idea vue 格式化 并保存文件 宏 快捷键 ctrl+s
    IIS web.config 跨域设置 不包含 options的设置 thinkphp tp3 跨域
    vue peek 解决了 vue-template 加载 相对目录 ./components 组件内容 vscode
    base-table 加入动态slot 流程 vue2
    原码、反码、补码知识详细讲解
    巴什博奕
    Integer.bitCount() 函数理解
    el-table中的el-image预览小记
    shell 从变量中切割字符串
    QGIS,使用polygon裁剪栅格出现问题
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3209929.html
Copyright © 2020-2023  润新知