C++ 为什么参数中的默认字符*必须是常量?
如果我遵守此规定,编译器将向我发送警告: 警告:已弃用从字符串常量到“char*”的转换 除非我将参数从C++ 为什么参数中的默认字符*必须是常量?,c++,c++11,visual-c++,C++,C++11,Visual C++,如果我遵守此规定,编译器将向我发送警告: 警告:已弃用从字符串常量到“char*”的转换 除非我将参数从char*pchString=“0”修改为const char*pchString=“0” 为什么参数中的默认字符*必须是常量?原因是,与使用字符串类相比,字符*被认为是过时的做法 因为像“some string”这样的字符串文本是不可变的,尝试修改一个(如果通过非常量引用传递,可以尝试修改它们)会导致未定义的行为。这就是为什么标准C++不赞成这个转换的原因。 尝试这个游戏(但请不要在生产代码
char*pchString=“0”
修改为const char*pchString=“0”
为什么参数中的默认字符*必须是常量?原因是,与使用字符串类相比,字符*被认为是过时的做法 因为像
“some string”
这样的字符串文本是不可变的,尝试修改一个(如果通过非常量引用传递,可以尝试修改它们)会导致未定义的行为。这就是为什么标准C++不赞成这个转换的原因。
尝试这个游戏(但请不要在生产代码中),现场:
#包括
int main()
{
char*str=“测试”;
str[0]=“w”;
std::cout当您使用字符串文本时,例如“0”
,它被放在程序的只读部分。对这些数据进行任何更改都会导致未定义的行为。通过尝试将char*
类型的变量初始化为sting文本,您允许修改只读数据。这就是编译器所抱怨的
它类似于:
#include <iostream>
int main()
{
char* str = "test";
str[0] = 'w';
std::cout << str; // oops
}
这与C++的默认参数无关。C++中的字符串文字是<代码> const <代码>,不管你在哪里使用。@ Juen Khaw,你可能想改变你的“关于我:”到“代码> const char *chSTAT=“初学者”;< /代码>:“vSoTCO,LoLS,u对我很不好:PThis根本就不与<代码>字符串< /Cord>类无关。
#include <iostream>
int main()
{
char* str = "test";
str[0] = 'w';
std::cout << str; // oops
}
const int num;
int* ptr = # // Wrong