声明字符串作为STD:字符串C ++(Declaring strings as std:string

2019-08-31 15:39发布

这是基于GCC / G ++,通常在Ubuntu。

下面是我做我的示例程序:

#include <iostream>

using namespace std;

int main()
{

std::string c = "Test";
cout << c;
return 0;
}

上面的代码工作正常。

但我有两个问题,我不完全得到...

  1. 写入字符串声明为std:string也能正常工作。 有什么不同。

  2. 如果我用这个std::string类中声明私有变量,我得到一个错误的错误:“性病”没有指定类型 。 此声明示例:

 class KType { private: std:string N; 

是否有人可以解释这些问题? 非常感谢!

Answer 1:

写入字符串声明为STD:字符串也能正常工作。 有什么不同。

如果您格式化它不同的差别是微小的更加清晰:

std:
    string c = "Test";

你声明一个标签std ,并使用该名称string已由倾倒进全局命名空间using namespace std; 。 正确书写它std::string ,您使用的名称stringstd命名空间。

如果我用这个std::string类中声明私有变量,我得到一个错误的错误: 'std' does not name a type.

那是因为你不能把一个标签,一个类定义,只有在一个代码块。 你必须把它写正确作为std::string那里。 (如果类是在头文件中定义,然后using namespace std比源文件更糟糕的想法,所以我劝你不要那样做。)

另外,如果你使用std::string ,那么你应该#include <string> 。 它看起来像你的代码的工作由事故由于<iostream>拉动更多定义比它需要的,但你不能可移植性依靠这一点。



Answer 2:

您需要包括串类的头:

#include <string>

这段代码有一个错字,缺了第二个冒号

std:string N;

应该:

std::string N;

以单冒号,就变成了跳转,这可能不是你的意思的标签。



Answer 3:

第一个问题:

首先,你缺少#include <string>指令。 可以不依赖于其它标题(如<iostream>#include所述<string>自动报头。 除此之外:

第二个问题:

写入字符串声明为STD:字符串也能正常工作。 有什么不同。

那是因为你有一个(恶) using指令在全局命名空间范围:

using namespace std;

该指令的效果是,从所有名称std命名空间被导入到全局命名空间。 这就是为什么完全合格std::string和不合格的string解析为同一类型。

如果省略了using namespace std; 指令时,你会使用不合格时,得到一个编译错误string名称。

第三个问题:

如果我使用一个类中该的std :: string声明一个私有变量,我得到一个错误的错误:“性病”没有指定类型。 此声明示例:

你缺少一个冒号。 这应该是:

std::string
//  ^

并不是

std:string
// ^


Answer 4:

写入字符串声明为STD:字符串也能正常工作。 有什么不同。

没有区别,除非你声明别的东西叫string 。 在代码中, stringstd::string指的是同一类型。 但要避免using namespace std不惜一切代价。

如果我使用一个类中该的std :: string声明一个私有变量,我得到一个错误的错误:“性病”没有指定类型。 此声明示例:

你需要#include <string> ,以便使用std::string 。 正在发生的事情是,你的第一个代码示例中, <iostream>似乎包括<string> 。 你不能依靠这一点。 你必须包括<string>



文章来源: Declaring strings as std:string in C++