gpt4 book ai didi

C++ 字符串 cout 字符丢失

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:54 24 4
gpt4 key购买 nike

这是 Visual Studio 中的控制台应用程序,所以我想看看如果我调用 cout 会发生什么在cout .它有点工作,但它删除了一个有点奇怪的角色。所以它从 string 中删除了字符数量在coutmain .所以它删除了与 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()

所以

"BBLLLLLLLLLL" + 1 

产量

BLLLLLLLLLL

"BBLLLLLLLLLL" + 2 

产量

LLLLLLLLLL

std::cout .

它对字符数组文字应用函数指针算法,“松散” 个字符,如doPrint()产生大于 0 的东西.

+ 的运算符优先级高于<< ,因此 doPrint()首先被调用并打印 AAAAA .所以你的状态

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

分解为

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

关于C++ 字符串 cout 字符丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38031589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com