C 字符串cout角色丢失

C++ string cout character lost

本文关键字:角色 cout 字符串      更新时间:2023-10-16

这是Visual Studio中的控制台应用程序,因此我想看看如果我在cout中称为cout,发生了什么。而且它有点可行,但它消除了一个有点奇怪的角色。因此,它删除了maincoutstring中的字符量。因此,它可以删除doPrint()函数返回的值的尽可能多的字符。

示例:如果返回值为1,它将输出" aaaaabllllllllllll"如果返回值为2,它将输出" aaaaallllllllll"

#include "stdafx.h"
#include <iostream>
int doPrint()
{
    std::cout << "AAAAA" << std::endl;
    return 1;
}
int main()
{
    std::cout << "BBLLLLLLLLLL" + doPrint() << std::endl;
    int x;
    std::cin >> x;
    return 0;
}

这并不是那么大,但我想知道为什么会发生这种情况。谢谢。

P.S:我知道我应该做<<,而不是+

好吧,基本上发生的是指针算法和指定的函数调用评估顺序。

"BBLLLLLLLLLL" + doPrint()

so

"BBLLLLLLLLLL" + 1 

产生

BLLLLLLLLLL

"BBLLLLLLLLLL" + 2 

产生

LLLLLLLLLL

使用std::cout

它将功能指针算术与字符数组文字使用,并且" LOOS" 字符,因为doPrint()产生的东西比0大。

+的运算符优先级高于<<,因此doPrint()被称为首先并打印AAAAA。所以你的staement

 std::cout << "BBLLLLLLLLLL" + doPrint() << std::endl;

分解为

  1. 致电doPrint()
    1.1。致电std::cout << "AAAAA" << std::endl;
  2. doPrint()的结果值
  3. 调用"BBLLLLLLLLLL" + 1
  4. 致电std::ostream& operator<<(std::otream&, const char*)
  5. 致电std::endl