C++ std::string 和字符串
Posted
技术标签:
【中文标题】C++ std::string 和字符串【英文标题】:C++ std::string and string 【发布时间】:2011-09-29 20:05:56 【问题描述】:我想没有人告诉我在 C++ 中使用 std::string 和仅使用字符串数据类型有什么区别??
在什么情况下应该使用std::string而不是标准字符串??
谢谢。
【问题讨论】:
什么标准的字符串数据类型?你在说char *
吗?
我的意思是字符串本身。就像当我声明一个变量'字符串名称'时......如果这有任何意义吗? :S
【参考方案1】:
它们都是同一类型。 std::string
指定命名空间,而 string
仅在使用 using namespace std;
或 using std::string
语句时才有意义。所以你使用什么没有任何区别(只要你保持一致)。
如果您谈论的是字符串文字(例如"hello"
),那么它们的类型是const char []
,隐式衰减为const char *
。 std::string
有一个非explicit
构造函数,它采用const char *
,这允许从const char *
到std::string
的隐式转换。可以使用std::string::c_str()
方法进行相反的操作。
如果您正在寻找使用std::string
而不是const char *
的理由,那么我想我的答案是“尽可能多地”。
【讨论】:
从技术上讲,字符串文字"hello"
的类型为 const char[6]
。【参考方案2】:
这些在您的程序中可能是相同的。 “标准”字符串位于“std”命名空间中。如果您“使用 std::string;”或“使用命名空间标准;”在模块内,它们是等价的。如果您没有指定“使用”语句,则需要提供对象的命名空间。最好不要在头文件中提供“使用”语句,因此您通常会在对象上看到命名空间解析/说明符。 (即 std::vector、mynamespace::myclass 等)。 “using”的使用在实现文件中更常见,它们不会像在头文件中指定的那样影响其他文件。
可以使用来自其他提供者的字符串对象。在这种情况下,提供者应该/应该在他们自己的命名空间中实现他们的字符串对象,并且您需要声明您正在使用哪个字符串对象。
所以:
File: stdString.cpp
-------------
#include <string>
#include "providerx/string.h"
using namespace std;
void foo()
string x; // Using string object provided by the C++ standard library
std::string y; // Again, using C++ standard lib string
providerx::string // Using string object defined within the providerx namespace
File: providerString.cpp
-------------------
#include "providerx/string.h"
using providerX::string;
void foo()
string x; // Using providerx string object
【讨论】:
我喜欢每种形式何时合适的解释!【参考方案3】:很可能,您的代码中有using namespace std
。这允许您在不解析范围的情况下访问 std 命名空间的成员。所以……
std::string == 字符串
【讨论】:
以上是关于C++ std::string 和字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中搜索 std::string 中的子字符串?
将 System::String^ (C# 字符串)转换为 C++ std::string [重复]