我何时使用&#39; #include <string>&#39;在C ++程序的开头?</string>

时间:2014-12-08 01:43:56

标签: c++ string

我对在程序开始时使用#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>吗?

4 个答案:

答案 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*)的指针,而不是stringstring类的一个实例)。您可以通过将string作为参数传递给char*的构造函数,从string创建{{1}}类的实例(包括字符串文字)。但它不是一个字符串,它只是一些误导性的术语。

类似的情况是在数组时调用向量。