gpt4 book ai didi

c++ - 为什么参数中默认的char*必须是const?

转载 作者:行者123 更新时间:2023-11-30 02:39:41 25 4
gpt4 key购买 nike

class MyString {
private:
char *m_pchString;
int m_nLength;
public:
MyString(char* pchString="0") { //problem on this parameter
m_nLength = strlen(pchString)+1;
m_pchString = new char[m_nLength];
strncpy(m_pchString, pchString, m_nLength);
m_pchString[m_nLength-1] = 0;
}
~MyString() {
delete[] m_pchString;
m_pchString = 0;
}
char* GetString() {return m_pchString;}
int GetLength() {return m_nLength;}
};

如果我遵守了这个,编译器会给我一个警告:

warning: deprecated conversion from string constant to 'char*'

除非我将参数从 char *pchString = "0" 修改为 const char *pchString = "0"

为什么参数中默认的char*必须是const?

最佳答案

因为像 "some string" 这样的字符串文字是不可变的,并且尝试修改一个(如果通过非常量引用传递,您可以尝试修改它们)会导致未定义的行为。这就是标准 C++ 不赞成这种转换的原因。

尝试这个很有趣(但请不要在生产代码中),实时 here :

#include <iostream>

int main()
{
char* str = "test";
str[0] = 'w';
std::cout << str; // oops
}

相关:Why are string literals const?

关于c++ - 为什么参数中默认的char*必须是const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29528423/

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