以下代码将打印出字符串:
char* test = "test";
std::cout << test << std::endl;
虽然我确实得到了这个编译器(GCC)警告:
警告:已弃用从字符串常量转换为'char *'
为什么我不需要取消引用char
指针来访问数据?另外,为什么我写的不赞成,如果我不想要昂贵的std::string
对象,我应该使用什么呢?
答案 0 :(得分:2)
为什么我不需要取消引用char指针
因为iostreams类有char*
/ char const*
的重载。取消引用它无论如何都只会输出一个char
。
另外,为什么我写的不赞成,我应该使用什么呢 如果我不想要一个昂贵的std :: string对象?
虽然使用std::string
的
test
的类型更改为char const*
。
答案 1 :(得分:2)
首先:问题出在这一行
char* test = "test";
字符串文字是只读数据,因此您应该将其声明为
const char* test = "test";
让编译器开心(即我保证我不会尝试修改那些数据,如果我,我将受到未定义行为的惩罚)。也就是说,您不需要取消引用指针,因为有const char*
overload来使用该数据。这也回答了你的代价(除非你的意思是其他的)。