【问题标题】:Why does cout produce the correct string output with <<, but not with +? [closed]为什么 cout 用 << 生成正确的字符串输出,而不用 + 生成? [关闭]
【发布时间】:2017-05-12 20:42:11
【问题描述】:

这显示没有输出:

int x = 10;
cout<<"Hello C++ " + x ;

但这确实显示了输出:

int x = 10;
cout<<"Hello C++ ";
cout<<x<<endl;

有什么问题?它们看起来完全一样。

顺便说一句,我在 Visual Studio 2010 上使用 Visual C++ 6.0。

【问题讨论】:

  • 欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
  • 你为什么这样说话?
  • @Mario "Hello C++ " + x 进行指针运算。它产生文字 + 10 的地址。
  • 对于因“印刷错误”而投票关闭的每个人,这里的情况有所不同,并且 OP 仅用于默认情况下可以使用 + 运算符将字符串与数字连接的语言?
  • @SingerOfTheFall:在实践中也使用了密切的原因来表明这个问题是如此基础,而且缺乏基础的初学者研究,以至于它似乎不太可能对未来的读者有实质性的、关于主题的用途. OP“习惯”什么并不重要。这显然不是一个实际的印刷错误,但对于更广泛的编程社区来说几乎同样无关紧要。尽管规范的欺骗会更好。碰巧,我根本没有关闭投票,而是回答了。

标签: c++


【解决方案1】:

How do you append an int to a string in C++?

我建议你仔细查看上面的帖子来解决你的问题。

在 C 或 C++ 中,最好使用字符串流进行连接。但要具体回答您的问题:

此 C++ 代码无输出:

int x = 10;
cout<<"Hello C++ " + x ; //uses "+" as you are trying to concatenate an "int" to some output to the stream

但这个显示输出:

int x = 10;
cout<<"Hello C++ "; //output directly to stream
cout<<x<<endl; //same here, no concatenation

那有什么问题,它们完全一样吗? 问题在于“+”连接到流,不,它们不一样! :)

【讨论】:

    【解决方案2】:
    int x = 10;
    cout << "Hello world!" << ++x;
    return 0; 
    

    如果你想增加一个变量,你应该使用++x。如果要减量,请使用--x

    而且,如果您想在另一个变量旁边或另一个字符串旁边显示一个变量,请在它们之间使用&lt;&lt;

    【讨论】:

    • ++x 是从哪里来的? OP 在哪里尝试递增或递减?
    • 假设 x 是一个变量 'x=10' 如果你想用 1 递增它的值,你应该写 '++x' 或 'x=+1' 如果你想减量一次使用 '--x' 或 'x=-1'
    • 是的,我知道,但这与问题有什么关系?
    【解决方案3】:
        "Hello C++ " + x ;
    

    没有意义。您将 10 添加到字符串“Hello C++”的地址,然后 std::cout 应该输出地址“Hello C++”+ 10 上的内容。 所以这根本没有意义。 std::cout 是 iostream 的一部分。

    【讨论】:

      【解决方案4】:

      因为这不是使用流或字符串的方式。

      + 运算符用于:

      1. 将两个数字相加,或
      2. 将两个std::strings 连接在一起。

      这里有一个字符串文字和一个数字。 + 运算符与这些不兼容。

      (你实际上最终做的是“添加”10 到表示字符串文字的指针;碰巧,因为你的字符串有十个字符长,所以指针正好留在字符串文字的 NULL 终止符所在的位置,所以这就像试图打印""。)

      正如您在第二个示例中发现的那样,正确的方法是再次使用流的&lt;&lt; 运算符。

      cout << "Hello C++ " << x;
      

      【讨论】:

        【解决方案5】:

        尝试使用而不是:cout&lt;&lt;"Hello C++ " + x ;

        cout<<"Hello C++ " << x ;
        

        【讨论】:

        • 第一个答案不错。我赞成它,但将来您可能希望考虑在您的答案中添加一些解释,以便 OP 知道为什么您的解决方案是正确的。
        猜你喜欢
        • 1970-01-01
        • 2017-03-03
        • 2022-01-23
        • 2015-09-26
        • 2018-05-30
        • 2020-06-23
        • 1970-01-01
        • 2015-02-12
        • 1970-01-01
        相关资源
        最近更新 更多