【发布时间】:2023-03-14 10:45:02
【问题描述】:
在C++ 中,string 是内置数据类型吗?
谢谢。
【问题讨论】:
-
不,我的编辑没有突出显示它:-)
标签: c++ string built-in-types
在C++ 中,string 是内置数据类型吗?
谢谢。
【问题讨论】:
标签: c++ string built-in-types
您想使用的内置的定义是什么?是内置您拥有的编译器工具集是,它应该。编译器是否对其进行了特殊处理? no,编译器将该类型视为任何用户定义的类型。请注意,这可能适用于大多数人会回答是的许多其他语言。
C++ 委员会的重点之一是将核心语言保持在最低限度,并在库中提供尽可能多的功能。这有两个目的:核心语言更稳定,库可以重新实现,增强......而不改变编译器核心。但更重要的是,您不需要特殊的编译器支持来处理大多数标准库,这一事实保证了核心语言对于大多数用途来说足够表达。
更简单的否定形式表示:如果语言需要特殊的编译器支持来实现std::string,那意味着用户没有足够的能力在核心语言中表达那个或类似的概念。
【讨论】:
built-in 来表示那些编译器内在函数(不在库中的东西)。
它不是原始的——也就是说,它不像int、char 等那样“内置”。最接近的内置类字符串类型是 char * 或 char[],这是旧的 C 处理字符串的方法,但即使这样也需要一堆库代码才能有效地使用。
相反,std::string 是几乎所有现代 C++ 编译器都附带的标准库的一部分。您需要#include <string>(或包含其他包含它的内容,但实际上您应该包含您的代码所引用的内容)才能使用它。
【讨论】:
如果你在谈论 std::string 那么不是。
如果你说的是字符数组,我猜你可以把它当作一个内置类型的数组。
【讨论】:
取决于内置的意思,但可能不是。 std::string 由标准库(因此也是 C++ 标准)定义,并且被不同的编译器非常普遍地支持,但它不是像 int 或 char 这样的核心语言的一部分。
【讨论】:
没有。
内置类型或“原始”类型可用于使用内置类型 char 创建字符串生命周期功能。这与实用函数一起在 C 中使用。在 C++ 中,仍然存在此功能,但添加了更直观的字符串使用方式。
string 类是 std 命名空间的一部分,是 basic_string 模板类的实例化。它被定义为
typedef basic_string<char> string;
它是一个能够根据需要动态调整大小的类,并且具有许多充当实用程序的成员函数。它还使用运算符重载,因此使用起来更直观。但是,此功能也意味着它在速度方面存在开销。
【讨论】:
它可以是内置的,但不是必须的。
C++ 标准库为其组件提供了文档化的接口。这可以作为库代码或编译器内置实现。标准并没有说明应该如何实施。
当您使用 #include <string> 时,您可以使用 std::string 实现。这可能是因为编译器直接实现它,或者因为它链接到一些库代码。我们不确定,除非我们检查每个编译器。
没有一个已知的编译器选择将其设为内置类型,因为他们不必这样做。纯库实现的性能显然已经足够了。
【讨论】:
没有。它是标准库的一部分。
【讨论】:
不,string 是一个类。
【讨论】:
string类的对象,这在C++下可能是不可能的,因此在一般意义上将其作为方法库提及将更具相关性。
char* 而不是 string 对象本身分配的,并且方法是单独使用的,而不是使用对象名称访问,就像我们在任何 OOP 语言中所做的那样; strobj.strrev();。因此,根据标准 OOP 规范,C++ 中的字符串不能充当其对象本身存储值并可以访问其方法的类。不过,在“C++ STL 字符串”中,仍然可以使用点. 运算符来访问方法。
std::string 是一个类。
绝对不是。 String 是标准库中的一个类。 char * 或 char[] 是内置类型,但 char、int、float、double、void、bool 没有任何添加(如指针、数组、符号或大小修饰符 - 无符号、长整数等)是基本类型。
【讨论】:
没有。有不同的实现方式(例如 Microsoft Visual C++),但 char* 是 C++ 表示字符串的方式。
【讨论】:
char*是C表示字符串的方式,const char[]是字符串字面量的类型,std::string是标准的字符串表示方式。
std::string-type 是标准的并且有一个标准接口,所以它/是/表示字符串的“C++方式”,而不是char*(这也不太正确,如果你的意思是字符串文字,你应该使用const char*).
string 类是 C++ 方式。 char* 是 C 方式。