C++ Primer Memo(1) – Section2上

接下来一段时间,会将之前写阅读C++ Primer时做的一些笔记更新上来。

知识比较散碎,也会有很多不严谨的部分。发上来时我会再阅读、检查一次,将发现的错误纠正,但难免仍有疏漏之处,还望指正。

书用的是C++ Primer第四版,中英文对照。

斜体字部分是原文摘录,前缀“//”的注释部分是自己的笔记。

 

今天先更新最初的Section2前半部分。

 

C++ Primer Memo(1) - Section2上

 

Section2.1

//C++内置字符类型为char(8b)和wchar_t(16b)

C++ 中,把负值赋给 unsigned 象是完全合法的,其果是该负对该类型的取个数求模后的 

 

Section2.2

     20     // decimal

     024    // octal

     0x14   // hexadecimal

     128u     /* unsigned   */          1024UL    /* unsigned long   */

     1L       /* long    */             8Lu        /* unsigned long   */

//L,U顺序没有区别

     3.14159F            .001f          12.345L            0.

     3.14159E0f          1E-3F          1.2345E1L          0e0

//加点可将立即数转换为浮点形式

     L'a'

//L表示wchar_t类型

 

There are no literals of type short.

没有 short 类型的字面值常量。 

 

可以将任何字符表示以下形式的通用转义字符: 

     \ooo

这里 ooo 表示三个八进制数字,这三个数字表示字符的数字值。 

也可以用十六转义字符来定字符: 

     \xddd

 

//当ooo不符合八进制规则时,赋值随编译器不同

//'\010000' vs8为字符0(ASCII 0x30),应为取了\ooo 后的第一个0.  bcb5为字符\b(ASCII 0x8),应为取了\010

//'\0999' vs8为字符9,取了\0后的9, bcb5为\0

 

两个相邻的仅由空格、制表符或换行符分开的字符串字面值(或宽字符串字面值),可连接成一个新字符串字面值。 

如果连接字符串字面值和宽字符串字面值的行为标准没有定义。 

     std::cout << "a multi-line "

                  "string literal "

                  "using concatenation"

               << std::endl;

 

Section2.3

//int _ = 100;没有问题!(变量名)

 

内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成 0,在函数体里定义的内置类型变量不进行自动初始化。 

 

如果声明有初始化式,那么它可被当作是定义,即使声明标记为 extern. 只有当 extern 声明位于函数外部时,才可以含有初始化式。 

 

Section2.4

//本Section内容都只适用于函数外的声明

 

在全局作用域里定 const ,它在整个程序中都可以访问。我可以把一个非 const 更定在一个文件中,假做了合适的声明,就可在另外的文件中使用量。

//无需包含!

 

与其他变量不同,除非特别说明,在全局作用域声明的 const 变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。 

const 变量默认为 extern。要使 const 变量能够在其他的文件中访问,必须地指定它为 extern 

// const的作用范围只限单一文件内,只用const声明的变量无法在其他文件内使用

//使用extern与const共同声明的变量可在其他文件内使用,但const属性仍只限本文件内

//(vs8 所有文件内的声明修饰符必须一致,既含有extern又含有const。

//bcb5内可以不含const,仅限非包含的情况,如果原定义在被包含的头文件里自然是不行的) 

Section2.1

//C++内置字符类型为char(8b)wchar_t(16b)

C++ 中,把负值赋给 unsigned 象是完全合法的,其果是该负对该类型的取个数求模后的

 

Section2.2

     20     // decimal

     024    // octal

     0x14   // hexadecimal

     128u     /* unsigned   */          1024UL    /* unsigned long   */

     1L       /* long    */             8Lu        /* unsigned long   */

//L,U顺序没有区别

     3.14159F            .001f          12.345L            0.

     3.14159E0f          1E-3F          1.2345E1L          0e0

//加点可将立即数转换为浮点形式

     L'a'

//L表示wchar_t类型

 

There are no literals of type short.

没有 short 类型的字面值常量。

 

可以将任何字符表示以下形式的通用转义字符:

     \ooo

这里 ooo 表示三个八进制数字,这三个数字表示字符的数字值。

也可以用十六转义字符来定字符:

     \xddd

 

//ooo不符合八进制规则时,赋值随编译器不同

//'\010000' vs8为字符0(ASCII 0x30),应为取了\ooo 后的第一个0.  bcb5为字符\b(ASCII 0x8),应为取了\010

//'\0999' vs8为字符9,取了\0后的9, bcb5\0

 

两个相邻的仅由空格、制表符或换行符分开的字符串字面值(或宽字符串字面值),可连接成一个新字符串字面值。

如果连接字符串字面值和宽字符串字面值的行为标准没有定义。

     std::cout << "a multi-line "

                  "string literal "

                  "using concatenation"

               << std::endl;

 

Section2.3

//int _ = 100;没有问题!(变量名)

 

内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成 0,在函数体里定义的内置类型变量不进行自动初始化。

 

如果声明有初始化式,那么它可被当作是定义,即使声明标记为 extern. 只有当 extern 声明位于函数外部时,才可以含有初始化式。

 

Section2.4

//Section内容都只适用于函数外的声明

 

在全局作用域里定 const ,它在整个程序中都可以访问。我可以把一个非 const 更定在一个文件中,假做了合适的声明,就可在另外的文件中使用量。

//无需包含!

 

与其他变量不同,除非特别说明,在全局作用域声明的 const 变量是定义该对象的文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问。

const 变量默认为 extern。要使 const 变量能够在其他的文件中访问,必须地指定它为 extern

// const作用范围只限单一文件内,只用const声明的变量无法在其他文件内使用

//使用externconst共同声明的变量可在其他文件内使用,但const属性仍只限本文件内

//vs8 所有文件内的声明修饰符必须一致,既含有extern又含有const

//bcb5内可以不含const,仅限非包含的情况,如果原定义在被包含的头文件里自然是不行的)

 

未完待续……

原文链接: https://www.cnblogs.com/millionhere/archive/2010/08/05/CPMemo1.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ Primer Memo(1) - Section2上

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/13424

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午12:50
下一篇 2023年2月7日 下午12:50

相关推荐