Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么';在c++;而我们已经有了char[]?_C++ - Fatal编程技术网

C++ 什么';在c++;而我们已经有了char[]?

C++ 什么';在c++;而我们已经有了char[]?,c++,C++,许多主题讨论了字符串和字符[]之间的区别。但是,我不明白为什么我们需要在C++中引入字符串?欢迎有任何见解,谢谢 String类不过是对char[]变量的改进。 使用字符串可以实现与使用char[]变量相同的目标,但您不必在意char[]的小技巧,如指针、分段错误…… 这是一种更方便的方法来构建字符串,但您并没有真正了解该语言的“底层”,比如如何实现串联或长度函数 下面是C++中的代码> STD::String 类的文档:字符串类,只不过是对 char []/Cuff>变量的改进。 使用字符串可

许多主题讨论了字符串和字符[]之间的区别。但是,我不明白为什么我们需要在C++中引入字符串?欢迎有任何见解,谢谢

String类不过是对
char[]
变量的改进。
使用字符串可以实现与使用
char[]
变量相同的目标,但您不必在意
char[]
的小技巧,如指针、分段错误……
这是一种更方便的方法来构建字符串,但您并没有真正了解该语言的“底层”,比如如何实现串联或长度函数

下面是C++中的代码> STD::String 类的文档:

字符串类,只不过是对 char []/Cuff>变量的改进。
使用字符串可以实现与使用

char[]
变量相同的目标,但您不必在意
char[]
的小技巧,如指针、分段错误……
这是一种更方便的方法来构建字符串,但您并没有真正了解该语言的“底层”,比如如何实现串联或长度函数

下面是C++中的代码> STD::String 类的文档:

<代码> char []/Cord>是C风格。它不是面向对象的,它迫使作为程序员的您处理实现细节(例如“\0”终止符),并一遍又一遍地重写处理字符串的标准代码

char[]
只是一个字节数组,可以用来存储字符串,但它不是一个有意义的字符串

std::string
是一个正确表示字符串并处理所有字符串操作的类。
它允许您创建对象并使代码完全面向对象(如果您希望这样做的话)。 更重要的是,它为您管理内存

考虑下面这段简单的代码:

// extract to string
#include <iostream>
#include <string>

main ()
{
    std::string name;

    std::cout << "Please, enter your name: ";
    std::cin >> name;
    std::cout << "Hello, " << name << "!\n";

    return 0;
}
//提取到字符串
#包括
#包括
主要()
{
std::字符串名;
std::cout>name;

std::cout
char[]
是C风格。它不是面向对象的,它迫使作为程序员的您处理实现细节(例如“\0”终止符),并一遍又一遍地重写处理字符串的标准代码

char[]
只是一个字节数组,可以用来存储字符串,但它不是一个有意义的字符串

std::string
是一个正确表示字符串并处理所有字符串操作的类。
它允许您创建对象并使代码完全面向对象(如果您希望这样做的话)。 更重要的是,它为您管理内存

考虑下面这段简单的代码:

// extract to string
#include <iostream>
#include <string>

main ()
{
    std::string name;

    std::cout << "Please, enter your name: ";
    std::cin >> name;
    std::cout << "Hello, " << name << "!\n";

    return 0;
}
//提取到字符串
#包括
#包括
主要()
{
std::字符串名;
std::cout>name;

STD::CouthP>正如MalSalts在评论中提到的,字符串可以增长。在我看来,这是C++中最强大的理由。

例如,以下代码存在一个错误,可能导致它崩溃,或者更糟,似乎工作正常:

char message[] = "Hello";
strcat(message, "World");
std::string message{"Hello"};
message += "World";
std::string
相同的想法也能正确执行:

char message[] = "Hello";
strcat(message, "World");
std::string message{"Hello"};
message += "World";

std::string的其他好处:

  • 您可以通过值将其发送到函数,而
    char[]
    只能通过引用发送;这一点看起来无关紧要,但它可以启用强大的代码,如
    std::vector
    (可以添加到的字符串列表)
  • std::string
    存储其长度,因此任何需要该长度的操作都更有效
  • >代码STD::String 类似于所有其他C++容器( Vector >等),因此如果您已经熟悉容器,则<>代码> STD::String 很容易使用
  • std::string
    具有重载的比较运算符,因此很容易与
    std::map
    std::sort
    等一起使用

  • 正如MalSalts在注释中所指出的,字符串可以增长。在我看来,这是在C++中拥有它们的最有力的理由。

    例如,以下代码有一个bug,可能会导致它崩溃,或者更糟,看起来工作正常:

    char message[] = "Hello";
    strcat(message, "World");
    
    std::string message{"Hello"};
    message += "World";
    
    std::string
    相同的想法也能正确执行:

    char message[] = "Hello";
    strcat(message, "World");
    
    std::string message{"Hello"};
    message += "World";
    

    std::string的其他好处:

  • 您可以通过值将其发送到函数,而
    char[]
    只能通过引用发送;这一点看起来无关紧要,但它可以启用强大的代码,如
    std::vector
    (可以添加到的字符串列表)
  • std::string
    存储其长度,因此任何需要该长度的操作都更有效
  • >代码STD::String 类似于所有其他C++容器( Vector >等),因此如果您已经熟悉容器,则<>代码> STD::String 很容易使用
  • std::string
    具有重载的比较运算符,因此很容易与
    std::map
    std::sort
    等一起使用

  • 如果您已经了解了这些差异,那么应该很清楚,
    std::string
    提供了比
    char[]更多的功能因为对于那些缺乏内存管理和连接等操作的具体基础的人来说,更容易处理,你不妨问为什么我们需要在C++中引入类?简单地说,使用它们更容易。
    s总之,一个好的类接口可以走很长的路——尝试编写执行多种操作(复制、追加、重新分配等)的非平凡代码在多个字符串上,每个字符串都表示为一个字符数组,您会发现您编写了大量的代码,然后花费大量时间使其在每个字符串和涉及多个字符串的每个操作(追加等)中正常工作。然后编写代码(从头开始,不尝试“调整”arr