C++11学习笔记(1)

注:本人所有学习笔记多来自各种书籍原著,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++基本内置类型

(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:

对于整型数a,b来说,取模运算或者求余运算的方法都是:
1.求 整数商: c = a/b;
2.计算模或者余数: r = a - c*b.

    d.当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的(undefined)。

注意:程序应该尽量避免依赖实现环境的行为。

        含又无符号类型的表达式中,把负数转化成无符号数类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数的模。

          当从无符号数中减去一个值时,不管这个值是不是无符号数,我们都必须确保结果不能是一个负值。

猜你喜欢

转载自blog.csdn.net/xrn1997/article/details/79067918