C++;std::字符串和字符串 我想没有人告诉我使用STD::string和C++中的字符串数据类型有什么区别??

C++;std::字符串和字符串 我想没有人告诉我使用STD::string和C++中的字符串数据类型有什么区别??,c++,string,std,stdstring,C++,String,Std,Stdstring,在什么情况下应该使用std::字符串而不是标准字符串 谢谢。它们都是同一类型的std::string指定名称空间,而string仅在使用名称空间std时才有意义或使用std::string语句。所以你用什么都没什么区别(只要你是一致的) 如果您谈论的是字符串文本(例如“hello”),那么它们属于常量字符[],在常量字符*中隐式衰减std::string有一个非显式的构造函数,它接受常量字符*,这允许从常量字符*隐式转换为std::string。相反的操作可以使用std::string::c_s

在什么情况下应该使用std::字符串而不是标准字符串


谢谢。

它们都是同一类型的
std::string
指定名称空间,而
string
仅在
使用名称空间std时才有意义
使用std::string
语句。所以你用什么都没什么区别(只要你是一致的)

如果您谈论的是字符串文本(例如
“hello”
),那么它们属于
常量字符[]
,在
常量字符*
中隐式衰减
std::string
有一个非
显式的
构造函数,它接受
常量字符*
,这允许从
常量字符*
隐式转换为
std::string
。相反的操作可以使用
std::string::c_str()
方法完成


如果您正在寻找使用
std::string
而不是
const char*
的原因,那么我猜我的答案是“尽可能多”。它们都是相同类型的
std::string
指定名称空间,而
string
仅在
使用名称空间std时才有意义
使用std::string
语句。所以你用什么都没什么区别(只要你是一致的)

如果您谈论的是字符串文本(例如
“hello”
),那么它们属于
常量字符[]
,在
常量字符*
中隐式衰减
std::string
有一个非
显式的
构造函数,它接受
常量字符*
,这允许从
常量字符*
隐式转换为
std::string
。相反的操作可以使用
std::string::c_str()
方法完成


如果您正在寻找使用
std::string
而不是
const char*
的原因,那么我猜我的答案是“尽可能多”。在您的程序中,这些可能是相同的。“标准”字符串位于“std”命名空间中。如果您在模块内“使用std::string;”或“使用命名空间std;”,则它们是等效的。如果没有指定“using”语句,则需要提供对象的名称空间。最好不要在头文件中提供“using”语句,因此您通常会在对象上看到名称空间解析/说明符。(即std::vector、mynamespace::myclass等)。在实现文件中使用“using”更为常见,因为它们不会像在头文件中指定时那样影响其他文件

可以使用来自其他提供程序的字符串对象。在这种情况下,提供程序将/应该在其自己的名称空间中有其字符串对象实现,并且您需要声明正在使用的字符串对象

因此:

文件:stdString.cpp
-------------
#包括
#包括“providerx/string.h”
使用名称空间std;
void foo()
{
字符串x;//使用C++标准库提供的字符串对象
STD::string y;//再次,使用C++标准的LIB字符串
providerx::string//使用在providerx命名空间中定义的string对象
}
文件:providerString.cpp
-------------------
#包括“providerx/string.h”
使用providerX::string;
void foo()
{
字符串x;//使用providerx字符串对象
}

在您的程序中,这些内容可能是相同的。“标准”字符串位于“std”命名空间中。如果您在模块内“使用std::string;”或“使用命名空间std;”,则它们是等效的。如果没有指定“using”语句,则需要提供对象的名称空间。最好不要在头文件中提供“using”语句,因此您通常会在对象上看到名称空间解析/说明符。(即std::vector、mynamespace::myclass等)。在实现文件中使用“using”更为常见,因为它们不会像在头文件中指定时那样影响其他文件

可以使用来自其他提供程序的字符串对象。在这种情况下,提供程序将/应该在其自己的名称空间中有其字符串对象实现,并且您需要声明正在使用的字符串对象

因此:

文件:stdString.cpp
-------------
#包括
#包括“providerx/string.h”
使用名称空间std;
void foo()
{
字符串x;//使用C++标准库提供的字符串对象
STD::string y;//再次,使用C++标准的LIB字符串
providerx::string//使用在providerx命名空间中定义的string对象
}
文件:providerString.cpp
-------------------
#包括“providerx/string.h”
使用providerX::string;
void foo()
{
字符串x;//使用providerx字符串对象
}

最有可能的是,您在代码中的某个地方使用了
名称空间std
。这允许您访问std命名空间的成员,而无需解析作用域。因此


std::string==string

最有可能的是,在代码中的某个地方使用了
名称空间std
。这允许您访问std命名空间的成员,而无需解析作用域。因此


std::string==string

什么标准字符串数据类型?你说的是字符吗?我指的是字符串本身。比如当我声明一个可变的“字符串名”。。。如果这有意义的话??:什么是标准字符串数据类型?你说的是字符吗?我指的是字符串本身。比如当我声明一个可变的“字符串名”。。。如果这有意义的话??:技术上,字符串literal
“hello”
的类型是
const char[6]
。技术上,字符串literal
“hello”
的类型是
const char[6]
。我喜欢
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
}