Skip to content

Latest commit

 

History

History
47 lines (40 loc) · 3 KB

File metadata and controls

47 lines (40 loc) · 3 KB

第2章 语言特性简介

  • C++中名称区分大小写,名称中签2048个字符是有效的。我们可以使用下划线作为变量名的开头,但是不能使用两个下划线,也不能使用大写字母之后紧跟一个下划线(这些都是C++的保留格式)。
  • 常量nullptr它表示0,主要用于表示任何指针类型的无效值。
  • 使用标识符#define定义一个常量,这方面的问题是,预处理器会执行简单的替换。使用const关键字声明常量时,C++编译器将执行类型检查,以确保正确地使用该常量。
  • 常量表达式
    • C++11中引入了一个名为constexpr的关键字。它用于处理表达式,并且表示该表达式应该在编译时被求值,而不是运行时被求值。
  • 枚举
    • 一个枚举变量是一组已经命名的常量,这意味着我们可以使用枚举变量作为函数的一个参数,比如:

        enum suits {clubs, diamonds, hearts, spades}
      
    • 默认情况下,枚举变量是整数类型,编译器将假定它是一个整数型(int)变量,但是你可以通过在变量声明时指定该整数类型来修改其类型。使用int类型(通常是4字节),可以使用char类型替代它(1字节)。

        enum suits : char {clubs, diamonds, hearts, spades}
      
    • 当使用枚举值时,可以只使用它的名称,不过通常会使用枚举变量名来限定它,使得代码更易读:

        suits card1 = diamonds;
        suits card2 = suits::diamonds;
      
    • 为了强制开发人员声明作用域,我们可以采用关键字class:

        enum class suits : char {clubs, diamonds, hearts, spades}
      
    • 默认情况下,编译器将把0赋值给第一个枚举元素,然后通过自增的方式,依次为其余枚举元素赋值。还可以为他们赋值:

        enum posts {ftp=21, ssh, telnet, smtp=25, hhtp = 80};
      
    • 枚举在switch语句中将非常有用,因为具名的值比只使用一个整数表达的含义更清晰。

    • 还可以使用枚举作为函数的参数,从而通过该参数传递的值进行限制。

        void stack(suits card)
        {
        	//card是suits中四个元素之一
        }
      
  • 命名空间
    • 命名空间提供了一种模块化代码机制。
    • 命名空间允许使用唯一的名称标记自定义类型、函数和变了,使用作用域运算符,你可以提供一个完整的限定名称。
    • 它的优点在于我们能够确切地知道将要调用哪个元素;缺点是使用完全限定名称实际上会关闭C++重载函数的参数查找机制。
    • C++11提供了一个名为内联命名空间的特性,它允许定义一个嵌套的命名空间,但是允许编译器在执行相关参数查找时,将该元素视为位于其父命名空间中。
  • C++变量作用域
    • extern
    • const
    • static
  • 运算符
    • C++11中引入了另外一种使用for循环的方法,旨在将之与容器搭配使用。

        vector<string> beatles = {"John", "Paul", "George", "Ringo"};
        for (string musician : beatles)
        {
        	cout << musician << endl;
        }