我对在程序开始时使用#include <string>
感到困惑。例如,在下面的代码中,我不使用#include <string>
,但该功能仍将打印出字符串&#34; Johnny最喜欢的号码是&#34;当它运行时。
#include <iostream>
using namespace std;
void printVariable(int number){
cout << "Johnny's favorite number is" << number << endl
}
但是,在下面的代码中,它确实包含#include <string>
。
#include <iostream>
#include <string>
using namespace std;
class Var{
public:
void setName(string x){
name = x;
}
string getName(){
return name;
}
private:
string name;
};
int main(){
Var Classy;
Classy.setName("Johnny Bravo");
cout << Classy.getName() << endl;
return 0;
}
如果变量代表字符串,我只使用#include <string>
吗?
答案 0 :(得分:6)
如果变量代表字符串,我只使用
#include <string>
吗?
是
使用类型为#include <string>
的变量时使用std::string
。
与直觉相反,代码"text here"
不是std::string
;它是一个字符串文字,一个C风格的字符串,一个const char[10]
可转换为const char*
。欢迎使用C ++及其遗留的奇怪之处。
答案 1 :(得分:2)
在你的第一个案例中,库&#34;字符串&#34;不需要。对象&#34; cout&#34;由图书馆&#34; iostream&#34;支持,因此你有:
#include <iostream>
对于第二种情况,你明确地使用&#34; string&#34;,因此库&#34; string&#34;是必需的:
#include <string>
答案 2 :(得分:1)
如果您在代码中使用类型std::string
,则应包含<string>
标头。该标题中还有一些其他类型和功能,但std::string
是最常用的类型和功能。
但是,您不需要包含此标题只是为了使用内置于核心语言中的字符串文字。
答案 3 :(得分:1)
您的问题源于您知道"aabcd"
之类的内容是字符串字面值。所以,它的类型应该是string
。嗯,那不是真的。
C ++有很多来自C的功能。包括数据类型。所以,这是一个指向char(char*
)的指针,而不是string
(string
类的一个实例)。您可以通过将string
作为参数传递给char*
的构造函数,从string
创建{{1}}类的实例(包括字符串文字)。但它不是一个字符串,它只是一些误导性的术语。
类似的情况是在数组时调用向量。