Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++,为什么使用const STD::String和参数名称?_C++ - Fatal编程技术网

C++,为什么使用const STD::String和参数名称?

C++,为什么使用const STD::String和参数名称?,c++,C++,在查看一些代码时,我遇到了一个具有以下参数的方法 methodName(const std::string & parameterName) 我知道const用于方法中不能更改的值,并且&是引用的值 为什么和什么时候应该使用这个而不仅仅是常量字符串 const是函数不会更改参数的保证 &是一个参考;这意味着传递给methodName的字符串是通过引用传递的。这样做的优点是它不会被复制,因此可以提高性能 总之,这是有效传递大对象的常见模式。一个简单的const std::string将复

在查看一些代码时,我遇到了一个具有以下参数的方法

methodName(const std::string & parameterName)
我知道const用于方法中不能更改的值,并且&是引用的值

为什么和什么时候应该使用这个而不仅仅是常量字符串

const是函数不会更改参数的保证

&是一个参考;这意味着传递给methodName的字符串是通过引用传递的。这样做的优点是它不会被复制,因此可以提高性能

总之,这是有效传递大对象的常见模式。一个简单的const std::string将复制整个字符串,对于长字符串,这将是非常低效的

自C++11以来,您还可以通过它们高效地传递对象

我知道const用于不能更改的值

const用于任何不能更改的内容—值、指针或引用。在不应该更改某些内容的情况下使用const是一个好主意,即使您通过值传递它

为什么和什么时候应该使用这个而不仅仅是常量字符串

conststring&更经济,因为它可以避免复制字符串的内容。当传递给函数的字符串保证在函数期间保持不变时,应该使用它。直接调用函数时总是这样

相反,当函数仍在运行时字符串可能被删除时,应使用const string


例如,当您在不同的线程上调用函数,然后删除传递给它的参数,或者让参数超出范围时,可能会发生这种情况。尝试按常量引用传递参数将导致未定义的行为,而按常量值传递参数将生成私有副本,从而阻止UB。

尽管这里有所有答案,但有时实际上最好按值传递字符串,这是为了提高性能。一个最常见的例子是字符串的运算符+的实现。

您需要使用const STD::string代替const字符串,因为您使用的是全局程序不可访问的C++字符串类。

这是因为C++字符串类在命名空间STD命名空间下定义为一组类,而要使用C++字符串类,则需要从该命名空间访问。此外,还需要使用范围解析运算符:

语法:

<namespace_name>::<class_name>

因此,您需要使用std::string。

注意:没有参考的void fconst T'只是一个实现细节,防止对复制的参数进行修改。您读的哪本书没有涵盖这样一个基本内容?