第一章 使用字符串

1.变量是一个具有名称的对象,对象则是计算机的一段具有类型的内存空间。有些对象可能没有名称。

2.局部变量有限的生存期是区分变量和对象的一个重要依据。

3.对象类型会提供接口,可以对该类型所作的操作

4.>>运算符从标准输入中读进一个字符串,然后把读到的值存储到name的对象中。读取时会略去输入开始时碰到的空白字符(空白、制表键、回退键或换行符),然后连续的把字符读到name变量中,直到遇到了另一个空白字符或者文件结束标记为止。

std::cin >> name;

5.缓冲区?输入输出库会把它的输出保存在缓冲区中,为了减少每一个输出请求都做一个写操作的系统开销,库使用了缓冲区来累计待写到输出装置的字符,而是在有必要的时候,它才会把缓冲区的内容写到输出装置中从而刷新缓冲区,这样他就可以把几个输出操作合并到一个单独的写操作中了。

三件事情会导致系统刷新缓冲区:

1)缓冲区满了;

2)请求库从标准输入流中读取数据;

3)我们明确要求刷新缓冲区。例如:std::endl

std::cout << std::endl;

运行长时间的程序应该在适当的时刻刷新缓冲区,防止输出可能会长时间的滞留在缓冲区中,从而导致可能会等待很久才能看到程序的程序所写的输出。

#include <iostream>
#include <string>

int main()
{
    std::cout << "请输入名字:";
    std::string a;
    std::cin >> a;

    size_t size = a.size();//返回字节长度,所以输入中文不会有问题

    std::string third = "* Hello " + a + "! *";
    std::string first(third.size(), '*'); //返回字节长度,所以输入中文不会有问题
    std::string space(third.size()-2, ' ');
    std::string second = "*" + space + "*";
    std::cout << first << std::endl;
    std::cout << second << std::endl;
    std::cout << third << std::endl;
    std::cout << second << std::endl;
    std::cout << first << std::endl;
    
}

7.<<、+是左结合

8.字符直接量‘a’的类型是内建类型char,字符串直接量较为复杂