【问题标题】:Concatenating string and int in c++ [duplicate]在c ++中连接字符串和int [重复]
【发布时间】:2024-01-11 14:07:01
【问题描述】:

当我遇到一些对我来说不太清楚的事情时,我正在用 C++ 做一些练习:

cout << "String" + 1 << endl;

输出:字符串

我建议它是指针算术,但这是否意味着每次我在引号中打印不属于先前定义的数组的内容时,我实际上创建了一个 char 数组?

【问题讨论】:

  • "String" 的类型是const char*,所以是的,它是指针算法,但你没有创建一个数组,它被烘焙到可执行文件的数据部分(AFAIK)。跨度>
  • @Borgleader -- "String" 的类型是 const char[7]
  • @PeteBecker 是的,但实际上它“总是”衰减。不过,您绝对是正确的。所以让我像往常一样保持警惕。
  • @Borgleader -- 不,它不会“总是”衰减。正是这种草率让初学者(有时是更高级的程序员)陷入困境。
  • 你也可以写&amp;"String"[1],因为加法是可交换的,&amp;1["String"]

标签: c++ string pointers int


【解决方案1】:

带引号的字符串(正式的字符串文字)是一个 const char 数组,无论您是打印它还是用它做任何其他事情。

【讨论】:

    【解决方案2】:

    代码:

    cout << "String" + 1 << endl;  
    

    效果和这个一样:

    const char *ptr = "String";
    cout << ptr + 1 << endl;
    

    所以不,您不创建新数组,您只需更改指针并将其传递给std::cout

    【讨论】:

    • 编译器会将ptr + 1优化为单个数字。
    • @YashasSamaga 和?
    • 没什么,但我想知道编译器是否会丢弃第一个字符来执行 cout
    • @YashasSamaga 可能不是,在这种情况下这并不重要
    最近更新 更多