在c++中将字符串声明为std:string
Declaring strings as std:string in C++
这是基于GCC/g++的,通常在Ubuntu上。
这是我完成的示例程序:
#include <iostream>
using namespace std;
int main()
{
std::string c = "Test";
cout << c;
return 0;
}
以上代码运行正常。
但是我有两个问题我不太明白…
将字符串声明写为
std:string
(带有一个:
)也可以正常工作。有什么区别?如果我在类中使用
std:string
(与一个:
)来声明私有变量,我会得到一个错误错误:' std '没有命名类型。声明的示例:
class KType
{
private:
std:string N;
};
谁能解释一下这些问题?很多谢谢! 将string声明写成std:string也可以。有什么不同?
如果你对它进行不同的格式化,区别会稍微清晰一些:
std:
string c = "Test";
您正在声明一个名为std
的标签,并使用由using namespace std;
转储到全局命名空间的名称string
。正确地写为std::string
,您使用的是std
名称空间中的名称string
。
如果我在类中使用
std::string
来声明私有变量,我得到一个错误错误:‘std’ does not name a type.
这是因为你不能把标签放在类定义中,只能放在代码块中。你必须把它正确地写为std::string
。(如果类是在头文件中定义的,那么using namespace std
是一个比在源文件中更糟糕的主意,所以我强烈建议您不要这样做。)
同样,如果你正在使用std::string
,那么你应该使用#include <string>
。看起来你的代码工作是偶然的,因为<iostream>
拉入了比它需要的更多的定义,但你不能移植依赖于这一点。
您需要包含字符串类头:
#include <string>
这段代码有一个错别字,缺少第二个冒号
std:string N;
应:std::string N;
加上一个冒号,它就变成了goto的标签,这可能不是您的意思。
第一个问题:
首先,您缺少#include <string>
指令。您不能依赖其他报头(如<iostream>
)来自动#include
<string>
报头。除此之外:
第二个问题:
将string声明写成std:string也可以。有什么不同?
这是因为你有一个(邪恶的)using
指令在全局命名空间范围:
using namespace std;
这个指令的效果是所有来自std
命名空间的名字都被导入到全局命名空间中。这就是为什么完全限定的std::string
和不限定的string
解析为相同的类型。
如果省略了using namespace std;
指令,那么在使用未限定的string
名称时将会出现编译错误。
第三个问题:
如果我在类中使用std::string声明私有变量,我得到一个错误错误:' std '没有命名类型。该声明的示例:
您缺少一个冒号。应该是:
std::string
// ^
和
std:string
// ^
将string声明写成std:string也可以。有什么不同?
没有区别,除非你声明了另一个叫做string
的东西。在您的代码中,string
和std::string
引用同一类型。但要不惜一切代价避免using namespace std
。
如果我在类中使用std::string声明私有变量,我得到一个错误错误:' std '没有命名类型。该声明的示例:
您需要#include <string>
才能使用std::string
。正在发生的事情是,在您的第一个代码示例中,<iostream>
似乎包括<string>
。你不能依赖那个。必须包含<string>
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 重载 + 自己的类和 std::string 的运算符
- 如何使用 std::string 作为 QHash 的键?
- 将日语 wstring 转换为 std::string
- 可以从std::string继承以提供类型一致性吗
- 构造函数采用std::string_view与std::string并移动
- 在共享缓冲区内存中创建 ::std::string 对象
- std::string.size() 未知行为
- Valgrind 在 std::string::swap 中报告 SIGILL