为什么cout使用<<而不是+?生成正确的字符串输出?

时间:2016-12-28 14:36:01

标签: c++

这显示没有输出:

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

但这确实显示了输出:

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

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

BTW我在Visual Studio 2010上使用Visual C ++ 6.0。

5 个答案:

答案 0 :(得分:4)

因为那不是如何使用流或字符串。

+运算符用于:

  1. 将两个数字加在一起,或
  2. 将两个std::string连接在一起。
  3. 这里有一个字符串文字和一个数字。 +运算符与这些运算符不兼容。

    (你实际上最终要做的是“添加”10到表示字符串文字的指针;因为它发生了,因为你的字符串是十个字符长,这使得指针正好在你的字符串文字的NULL终结符的位置是的,所以就像试图打印""。)

    正如您在第二个示例中找到的那样,正确的方法是再次使用流的<<运算符。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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

那么问题是什么,它们完全一样吗? 问题是流的“+”连接和NO,它们不一样! :)

答案 3 :(得分:0)

    "Hello C++ " + x ;

毫无意义。你将10添加到字符串“Hello C ++”的地址,然后std :: cout应该输出地址为“Hello C ++”+ 10的输出。 所以这简直没有意义。 std :: cout是iostream的一部分。

答案 4 :(得分:-1)

int x = 10;
cout << "Hello world!" << ++x;
return 0; 

如果要增加变量,则应使用++x。如果要减少它,请使用--x

并且,如果您想要在另一个变量旁边显示变量,或者在另一个变量旁边显示变量,请在它们之间使用<<