作者:欣欣大妮 | 来源:互联网 | 2022-12-08 18:29
经过多年的Java编写,我想再深入挖掘一下C++.
虽然我认为我可以处理它,但我不知道我是否处理了"最先进的"状态.
目前我尝试理解如何处理作为const指针传递的std :: strings作为方法的参数.
在我的理解中,我想对指针的内容(实际字符串)执行的任何字符串操作都是不可能的,因为它是const.
我有一个方法应该将给定的字符串转换为小写,我做了相当大的混乱(我相信),以使给定的字符串可编辑.看一看:
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 < for this!!!!)
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
std::cout <
特别是第一部分,我使用char缓冲区,将给定的字符串复制到一个可修改的字符串让我烦恼.有没有更好的方法来实现这一点?
此致,迈克
1> formerlyknow..:
参数是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
内部的修改不会对传递给函数的参数产生任何影响.