下面是c ++语句的提示:
cout << "TESTING" + 2 << endl;
我了解为什么此声明会打印出刺痛。但是我的问题是,如果我执行下面的代码,将会导致错误。我不明白为什么这是同一回事。对不起一个基本问题,我是c ++的新手。
string t = "TESTING";
cout << t + 2 << endl;
在此先感谢您的帮助。 :)
下面是c ++语句的提示:
cout << "TESTING" + 2 << endl;
我了解为什么此声明会打印出刺痛。但是我的问题是,如果我执行下面的代码,将会导致错误。我不明白为什么这是同一回事。对不起一个基本问题,我是c ++的新手。
string t = "TESTING";
cout << t + 2 << endl;
在此先感谢您的帮助。 :)
这是一个有趣的案例。我不确定您是否实际打印了第一条语句的结果,但是如果您看到,实际上是得到"STING"
而不是"TESTING2"
或类似的东西! / p>
这里发生了一些事情。在第一个语句中,您正在使用string literal构造一个字符串。在这种情况下,C ++创建一个const char[N]
并将您的字符串放入其中。由于char[N]
从技术上讲是一个数组(并且数组是一个指针),因此运算符+
充当增量,并且"TESTING" + 2
的结果实际上是指向{{1}的第二个元素的指针},即"TESTING"
。您不会看到任何错误,因为C ++认为您想要做什么。
在第二条语句中,您要告诉C ++我想要一个"STING"
对象。 std::string
的设计安全性更高,如果您尝试向其添加字符串以外的其他内容,则会will不休。因此,这样做时会出现错误。为了使第二条语句按预期工作,应写std::string
。
了解字符串和char类型之间的区别很重要。字符串是管理字符串的类。而char []是一个字符数组。请参考this问题进行解释。如果您这样做,代码将起作用:
#include <iostream>
int main ()
{
char t[] = "TESTING";
std::cout << t + 2 << std::endl;
return 0;
}
如果要将字符串与int连接,则应显式转换它:
#include <iostream>
int main ()
{
std::string m = "Testing ";
std::cout << m + std::to_string(2) << std::endl;
return 0;
}