• 【C++ Primer】读书笔记_第一章


    Main():
      1. C++程序必须包含main()函数,操作系统通过调用main来运行C++程序。
      2. main()的形参可以为空。
      3. main函数的返回类型必须为int,返回给操作系统。int类型是一种内置函数(指由语言定义的类型)。
      4. main函数的返回值被用来指示状态。返回值0表明成功,非0的含义由系统定义,通常用来指出错误类型。

    编译运行:

      1. IDE(集成开发环境)集成的是编译器、程序创建和分析工具包。

      2. Windows下编译运行.cpp文件:

             2.1 编译器:GNU

        2.2 步骤:首先安装MinGW并配置环境变量(具体过程参考其他博文)。然后gcc -o program1 program1.cpp 即可生成 可执行文件program1.exe。如果不写progam1,写的是gcc  program1.cpp,则会生成一个a.exe的可执行文件

        2.3 在Windows中运行可执行文件时,可直接输入program1,可以忽略其扩展名.exe。

    输入输出:

      1. C++并未定义任何输入输出语句,而是通过一个全面的标准库来提高IO机制。iostream库就是其中一个。

      2. iostream库包含两个基础类型istream和ostream,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备独处或写入IO设备的。

      3. 标准库定义了4个IO对象:

             cin:标准输入

             cout:标准输出

             cerr:标准错误

             clog:输出程序运行时的一般性信息

      4. 当没有在头文件申明using namespace std时,在使用时需要加上std::,例如

    std::cout<<"Hello world!"<<std::endl;
    

      前缀std::指出名字cout和endl是定义在名为std的命名空间(namespace)中的,::是作用域运算符,标准库定义的所有名字都在命名空间std中。

      命名空间可以帮助避免名字定义冲突,以及使用库中相同名字导致的冲突。从而也就表示可以自己定义一个与库中相同名字的名字,二者可同时存在,但是还是尽量不要这么做。但是,如果加上一句“using namespace std”的说明,就不能这么做了,可能会产生始料未及的命名冲突,也就是说当你在程序中自己又写了一个同名的名字,那么在使用时会覆盖原来库里的,只使用你定义的这个。但是这样在一定程度上可以方便些程序,可以不用加前缀也能使用所需的名字了。

      输出运算符<<用以接受两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的是要打印的值。此运算符将右侧的值写入左侧的运算对象,整个式子的运算结果就是其左侧运算对象。输出运算符本身也就是一个运算符,所以也有运算及运算结果。上述的输出语句中有两个输出运算符,可以理解经历了两次运算,运算顺序是:

    (std::cout<<"Hello world!")<<std::endl;
    

      先计算第一个输出,把"Hello world!"的值写入了std::cout,再计算第二个输出,把std::endl的值写入了第一个运算符的结果,也就是(std::cout<<"Hello world!")。

           其中"Hello world!"这类消息称为字符串字面值常量,是用一对双引号包围的字符序列。

           endl称为操纵符,跟C语言中的 不同,它在换行的同时会清空输出流的缓冲区。可以这么理解:当要写输出时,数据先到达缓冲区,等待写入,再到达输出设备,endl则可以将数据真正写入输出流并自动清空缓冲区。!程序员应在调试时常常添加打印语句,保证一直刷新流,否则,程序如果出错,输出可能还留在缓冲区,从而导致关于程序崩溃位置的错误。

           输入运算符>>大致与输出运算符一致,只是它是从左侧运算对象的istream读入数据并存入右侧的运算对象中,方向不一样。但是也是返回其左侧运算对象作为其计算结果,所以std::cin>>v1>>v2的实质也是(std::cin>>v1)>>v2  

      5. ++i 与i++

           可以这么认为:

           ①++i是 

    i=i+1; 
    return i;

           ②i++是 

    int t=i; 
    i=i+1; 
    return t;

           从而可以发现++i更高效,推荐使用++i。

      6. for循环和while循环的优劣。

           如果实现1-5的累加,

           while循环需要这么做:

    int i=0,sum=0;
    while(i<=5)
        sum+=i;
    return sum;

           for循环需要这么做:

    int sum=0;
    for(int i=0;i<=5;i++)
        sum+=i;
    return sum;

           对比可以发现,

    •        for循环可以让变量i只生存在循环内部,当循环结束时,i被回收,从而可以节省空间,而且代码行数也较少。
    •   while适用于在执行循环体内部语句前就需要对i做处理的情况,for只能是在执行完i++后,再做sum+=i。
    •   对于有些人认为while适合循环次数不易预知的情况、for语句适合循环次数易预知的情况这一观点,我不太认同,因为for循环头中的循环条件语句其实也可以写成跟while语句一样的、甚至“i++”这个表达式可以也成跟while语句内部的相关语句一样

      所以我认为本质上只是第一点和第二点的区别。此外do while语句适合循环至少执行一次的情况这一点没错。

      7. 读取数量不定的输入数据

           在输入数据未知的情况下,可以用while语句来接收,比如                      

    int sum=0,value=0;
    while(std::cin>>value)
        sum+=value;
    return value

           这里数据读取操作是在while的循环条件中完成的,while循环条件的求值就是执行

    std::cin>>value
    

      而输入操作符>>是从istream中读取一个数,保存在value中,其运算符结果返回给左侧运算对象std::cin,因此,此循环条件实质上是检测输入流std::cin是否为真。如果流的状态是有效的,即流未遇到错误,那么检测成功;如果遇到文件结束符(可以输入Ctrl+z 回车),或遇到一个无效输入时(例如读入的值不是一个整数),istream对象的状态会变为无效,从而使条件变为假。

           本人学习过一定的C++,但是只关注了编程内容即算法,没有关注过以上的绝大部分内容,所以本篇用以记录我以前没有注意过的点。

  • 相关阅读:
    Windows 服务的安装(1)
    C#编写window服务,一步一步(1)
    .net 读写记事本文件
    C#中POST数据和接收的几种方式(抛砖引玉)
    Newtonsoft.Json 通过 JObject 读取 json对像 超简单
    Winform读写App.config文件以及重启程序
    WebMatrix之WebMatrix.Data
    C#中方法的参数的四种类型
    zh-Hans vs.net 通过 管理nuget程序包下载简体中文语言包 zh-cn
    .net C# 图片转Base64 Base64转图片
  • 原文地址:https://www.cnblogs.com/a-present/p/9128079.html
Copyright © 2020-2023  润新知