gpt4 book ai didi

c++ - 使用 const std::string 指针作为函数参数

转载 作者:太空狗 更新时间:2023-10-29 23:48:50 24 4
gpt4 key购买 nike

在编写 Java 多年之后,我想再次深入研究 C++。

虽然我认为我可以处理它,但我不知道我是否以“最先进”的方式处理它。

目前我试图理解如何处理作为常量指针传递给方法的参数的 std::strings。

据我所知,我想对指针的内容(实际字符串)执行任何字符串操作都是不可能的,因为它是常量。

我有一个方法可以将给定的字符串转换为小写,并且我做了相当大的困惑(我相信)以使给定的字符串可编辑。看看:

class Util
{
public:
static std::string toLower(const std::string& word)
{
// in order to make a modifiable string from the const parameter
// copy into char array and then instantiate new sdt::string
int length = word.length();
char workingBuffer[length];
word.copy(workingBuffer, length, 0);

// create modifiable string
std::string str(workingBuffer, length);

std::cout << str << std::endl;

// string to lower case (include <algorithm> for this!!!!)
std::transform(str.begin(), str.end(), str.begin(), ::tolower);

std::cout << str << std::endl;

return str;
}
};

尤其是第一部分,我使用 char 缓冲区将给定的字符串复制到可修改的字符串中,这让我很烦。有没有更好的方法来实现它?

问候,迈克

最佳答案

参数是const(它是一个引用而不是一个指针!)但这并不妨碍你复制它:

 // create modifiable string
std::string str = word;

话虽这么说,为什么首先要使参数成为 const 引用?使用 const 引用可以很好地避免参数被复制,但是如果您无论如何都需要复制,那么只需复制一个即可:

std::string toLower(std::string word) { 
std::transform(word.begin(), word.end(), word.begin(), ::tolower);
// ....

请记住,C++ 不是 Java,值是值而不是引用,即拷贝是真实的拷贝,在函数内部修改 word 不会对传递给函数的参数产生任何影响。

关于c++ - 使用 const std::string 指针作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51669008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com