注:本人所有学习笔记多来自各种书籍原著,C++11学习笔记根据《C++Primer (第五版)》整理,仅供个人复习使用。
1.读入数量不定的输入数据
#include<iostream> int main() { int sum = 0, value = 0; //读取数据直到遇到文件尾 while(std::cin >> value) sum += value; std::cout<<"Sum is:"<<sum<<std::endl; return 0; }
我们可以将istream对象作为判断条件来判断输入是否结束。当使用一个istream对象作为条件时,其效果时检查流的状态。如果流是有效的,即流未遇到错误(遇到文件结束符或遇到无效输入),那么检测成功。而处于无效状态的istream对象会使条件变为假。
PS:当从键盘向程序输入数据时,对于如何指出文件结束,不同的操作系统有不同的约定。在Windows系统中,输入文件结束符的方法时Ctrl+Z,然后按Enter或Return键。在Unix系统中,包括Mac OS X系统中,文件结束符输入是用Ctrl+D。
2.使用文件重定向
测试程序可以使用操作系统提供的文件重定向功能,这种机制允许我们将标准输入和标准输出与命名文件关联,格式如下:
$ 可执行文件名<输入文件名> 输出文件名
PS:Windows系统需要带文件名后缀,Linux不需要。
3.C++基本内置类型
![](/qrcode.jpg)
(1)算数类型分为两类:整型(包含字符和布尔类型在内)和浮点型
PS:通常在计算时,float类型准确度要低于double类型,简单说,就是在参与运算时double类型比float类型更准确。
(2)带符号类型和无符号类型
除去布尔型和扩展的字符型之外,其他整型可以划分为带符号(signed)的和无符号(unsigned)的两种。带符号类型可以表示正数、负数或0,无符号类型则仅能表示大于等于0的值。
特别需要注意的是,虽然字符型被分为了三种:char、signed char 和unsigned char,但是类型char和signed char并不一样。字符的表现形式只有两种:带符号的和无符号的。类型char实际上会表现为上述两种形式的一种,具体是哪种由编译器决定。
无符号类型中所有比特都用来存储值。
以下是选择符号类型的一些准则:
a.当明确知道数值不会为负数的适合,选无符号类型。
b.使用int执行整数运算。如果 数值超出int类型,选用long long。
c.在算术表达式中不要使用char和bool。如果你需要使用一个不大的整数,那么明确它的类型是signed char 或者unsigned char。
d.执行浮点数运算选用double。
(3)类型转换
类型所能表示的值的范围决定了转换的过程:
a.当我们把一个非布尔类型的算术赋值给布尔类型时,初始值为0则为false,否则结果为true。
b.当我们把一个布尔类型赋给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1。
c.当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后所得的余数。例,8 bite大小的unsigned char可以表示0至255区间内的值,如果我们赋了一个区间以外的值,则实际结果是该值对256取模后所得的余数。因此把-1赋给8 bite大小的unsigned char所得结果是255.
PS:
d.当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的(undefined)。
注意:程序应该尽量避免依赖实现环境的行为。
含又无符号类型的表达式中,把负数转化成无符号数类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数的模。
当从无符号数中减去一个值时,不管这个值是不是无符号数,我们都必须确保结果不能是一个负值。