接下来一段时间,会将之前写阅读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声明的变量无法在其他文件内使用
//使用extern与const共同声明的变量可在其他文件内使用,但const属性仍只限本文件内
//(vs8 所有文件内的声明修饰符必须一致,既含有extern又含有const。
//bcb5内可以不含const,仅限非包含的情况,如果原定义在被包含的头文件里自然是不行的)
未完待续……
原文链接: https://www.cnblogs.com/millionhere/archive/2010/08/05/CPMemo1.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/13424
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!