Jue*_*haw 1 c++ visual-c++ c++11
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;}
};
Run Code Online (Sandbox Code Playgroud)
如果我遵守了这个,编译器会发给我一个警告:
警告:不推荐将字符串常量转换为'char*'
除非我修改从参数char *pchString = "0"
到const char *pchString = "0"
为什么参数中的默认char*必须是const?
因为字符串文字"some string"
是不可变的,并且尝试修改它(如果通过非const引用传递,您可以尝试修改它们)会导致未定义的行为.这就是标准C++弃用此转换的原因.
试试这个很有趣(但请不要在生产代码中),住在这里:
#include <iostream>
int main()
{
char* str = "test";
str[0] = 'w';
std::cout << str; // oops
}
Run Code Online (Sandbox Code Playgroud)
相关:为什么字符串文字是常量?