9. 内存模型和名称空间
1. 存储特续性、作用域和链接性
cin()是面向单词的输入,即使用空白(空格、制表符和换行符)来确定结束为止,将其传递给接收的变量或数组,空白之后输入的字符仍留在输入队列中,下次读取输入时,继续读取。
cin.getLine(name,ArSize)是面向行的输入,该函数每次读取一行,它通过换行符来确定行尾,但不保存换行符。相反,在存储字符串时,它用空字符替换换行符。
cin.get(name,ArSize)也是面向行的输入,该函数不是丢弃换行符,而是将其留在输入队列中。
cin.get()读取一个字符(即使是换行符),常用来处理换行符,为读取下一行输入做好准备。
cin.get(ch)读取一个字符(即使是换行符),并赋值给char类型的ch
方法cin.get(input,.ArSize)将一直读取输入,直到到达行尾或读取了ArSize-1个字符为止。它把换行符留在输入队列中。该程序使用cin.get(next)读取行输入后的字符。如果next是换行符,则说明cin.get(input,.ArSize)读取了整行;否则说明行中还有字符没有被读取。随后,程序使用一个循环来丢弃余下的字符,不过读者可以修改代码,让下一轮输入读取行中余下的字符。该程序还利用了这样一个事实,即试图使用get(char*,int)读取空行将导致cin为false。
a. 定位new运算符


2. 命名空间
using声明和using编译
using 声明和 using 编译指令是C++中用于简化命名空间和类型使用的关键字。虽然它们在功能上有些相似,但在使用方式和作用范围上有所不同。
- using 声明: using 声明用于引入特定的命名空间、类型或成员到当前的作用域中,以便可以直接使用它们,而无需使用完全限定的名称。它的语法如下:
1 |
|
示例:
1 |
|
在上述示例中,通过使用 using std::cout 和 using std::endl 声明,我们可以直接在 main 函数中使用 cout 和 endl,而无需写成 std::cout 和 std::endl。
需要注意的是,使用 using 声明会将特定的命名空间、类型或成员引入到当前作用域,可能会引入命名冲突的风险。因此,最好将 using 声明放在函数内部或尽可能小的作用域中,以减少潜在的冲突。
- using 编译指令: using 编译指令用于在源文件的顶部引入整个命名空间或命名空间中的特定部分,以便在整个源文件中直接使用它们。它的语法如下:
1 |
|
示例:
1 |
|
在上述示例中,通过使用 using namespace std,我们可以在整个源文件中直接使用 std 命名空间中的成员,而无需写成 std::cout 和 std::endl。
使用 using 编译指令可以简化代码,但可能会引入命名冲突的风险。因此,最好在源文件的顶部使用 using 编译指令,并避免在头文件中使用,以减少潜在的冲突。
总结:
- using 声明用于在当前作用域内引入特定的命名空间、类型或成员。
- using 编译指令用于在整个源文件中引入整个命名空间或命名空间的特定部分。