首页 > 解决方案 > 为什么初始化 char*[] 需要 const 而 string[] 不需要?

问题描述

char* c_arguments[] = { "hi","bye" }; //(1)
std::string cpp_arguments[]= { "hi","bye" };

(1) 在 C++17 标准下 Visual Studio 报错

E0144:“const char*”类型的值不能用于初始化“char *”类型的实体</p>

如果我const在开头添加代码编译得很好。

但是为什么第一行需要 const 而第二行不需要呢?

如何在char*[]没有 const 的情况下从字符串文字数组创建?

代码可以使用最新 C++ 标准的特性,而不必考虑遗留系统。

标签: c++

解决方案


第二行是调用复制构造函数。即使文字是只读的,副本也不是。

要创建指向可写字符串的指针数组,您必须循环并创建每个文字的副本,就像std::string构造函数所做的那样。


推荐阅读