为什么我不需要取消引用char指针来输出c风格的字符串?

时间:2014-07-11 08:53:03

标签: c++ arrays string char

以下代码将打印出字符串:

   char* test = "test";
   std::cout << test << std::endl;

虽然我确实得到了这个编译器(GCC)警告:

  

警告:已弃用从字符串常量转换为'char *'

为什么我不需要取消引用char指针来访问数据?另外,为什么我写的不赞成,如果我不想要昂贵的std::string对象,我应该使用什么呢?

2 个答案:

答案 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来使用该数据。这也回答了你的代价(除非你的意思是其他的)。