3.Strings 字符串如何工作?----对缓冲区的理解。

修改Hello World程序向特定的人问好。

#include <iostream>
#include <string>

int main()
{
    
    std::string name;
    std::cout << "What's your name? ";
    std::cin >> name;
    std::cout << "Hello  " << name << "!" << std::endl;

    system("pause");
    return 0;
}

为了输入名字,我们得有一个地方存放名字。这个地方叫做变量。变量是具有名称的对象。反过来,一个对象是计算机的一个类型的内存的一部分。

如果我们希望使用一个变量,我们必须告诉变量的类型和名称。编译器很容易检测出变量名称拼写错误和变量类型错误。

在这个例子中,我们的变量名为name,其类型是std :: string。使用std ::意味着它后面的名称,字符串是标准库的一部分。std :: string有一个关联的头文件,即<string>,所以我们在我们的程序中添加了一个适当的#include指令。

通常,标准库把输出保存在称为缓冲区的内部数据结构中,该缓冲区用于优化输出操作。大多数系统花费大量时间将字符写入输出设备,而不管有多少字符要写入。为了避免响应于每个输出请求的写入开销,库使用缓冲区来累加要写入的字符,并且只有在必要时将其内容写入输出设备才能刷新缓冲区。通过这样做,它可以将多个输出操作组合成单个写入。

有三个事件导致系统刷新缓冲区。首先,缓冲区可能已满,在这种情况下,标准库将自动刷新缓冲区。其次,标准库可能被要求从标准输入流中读取。 在这种情况下,标准库将立即刷新输出缓冲区,而不必等待缓冲区变满。第三,人工手动刷新缓冲区。

当程序运行到 std::cout << "What's your name? "; What's your name?被写入到缓冲区。接下来,我们用cin读取,这个读取刷新了缓冲区,我们就能看到What's your name?的提示。我们最后一个操作 std::cout << "Hello " << name << "!" << std::endl,开始都被写入到缓冲区,当程序运行到std::endl,标准库来刷新缓冲区。

原文地址:https://www.cnblogs.com/billxyd/p/7021565.html