C++你可能不知道的小细节(一)

输入与输出        

  iostream库

  istream:输入流,cin是istream类的对象(很多人不知道)

  ostream:输出流,cout是ostream类的对象

  cerr(标准错误流(非缓冲))

  clog(标准错误流(缓冲))

cout是在终端显示器输出,cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl,不论缓冲区是否漫了,都立即输出流中所有数据,然后插入一个换行符。

cerr流对象是标准错误流,指定为和显示器关联,和cout作用差不多,有点不同就是cout通常是传到显示器输出,但可以被重定向输出到文件,而cerr流中的信息只能在显示器输出。

clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出。 clog是cerr的缓冲版本。

<<:输出运算符,将字符串输出到outstring对象的cout中,因为<<是在类里定义的,所以可重载,即可以输出不同类型的值。

>>:输入运算符,可连续输入,返回的还是cin对象。(3<x<10中,x与3比较后返回的是布尔类型的值,不能再进行比较)

std::endl:不仅仅是一个回车,它可以将内容从缓冲区刷新到设备上(显示器)。如果写代码时不经常刷新缓冲区,代码崩溃的时候,内容在缓冲区里不会正确打印出来。(main函数结束后会将缓冲区的内容全部刷新到设备上)

控制流

for(int i=0;i<10;i++)
{
//循环体
}

执行顺序

  1. 初始化语句
  2. 循环条件
  3. 循环体
  4. 表达式
  5. 循环条件
  6. 循环体
  7. 表达式
  8. 循环条件
  9. .....

这个应该是个很小的细节吧。

当谈到C++编译器的小细节时,有一些不为人知的事实可以讨论。这些细节可能因编译器而异,以下是一些常见的例子: 1. 内联函数:内联函数是在调用点展开的函数。编译器会尝试内联短小的函数,以减少函数调用的开销。然而,并非所有的内联请求都会被编译器接受,例如递归函数、虚函数、函数体过大等情况。 2. 名称修饰(Name Mangling):C++编译器在编译过程会对函数和变量的名称进行修饰,以支持函数重载和命名空间。这样做是为了在链接过程能够正确地识别不同的符号。 3. 静态断言(Static Assertion):C++11引入了静态断言,它允许在编译时对表达式进行断言检查。如果断言失败,则会在编译时引发错误,而不是在运行时。 4. 注释处理:注释在编译过程被完全忽略。这意味着,即使注释包含有助于理解代码的信息,也不会影响编译结果。 5. 隐式类型转换:C++编译器在某些情况下会自动执行隐式类型转换,例如将整数类型提升为浮点类型,或者将派生类指针转换为基类指针。这些转换可能会导致意外的结果,因此需要谨慎使用。 6. 内存优化:编译器会对代码进行优化,以减少内存的使用。例如,它可以通过将多个变量存储在相同的内存位置上来减少内存占用,或者通过使用寄存器来提高变量访问的效率。 这些只是一些C++编译器的小细节,深入了解编译器的工作原理和各种编译器的行为将有助于编写更高效、可靠的代码。请注意,不同的编译器可能具有不同的行为和特
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的云烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值