c++ - 为什么初始化 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++ 标准的特性,而不必考虑遗留系统。
解决方案
第二行是调用复制构造函数。即使文字是只读的,副本也不是。
要创建指向可写字符串的指针数组,您必须循环并创建每个文字的副本,就像std::string
构造函数所做的那样。
推荐阅读
- javascript - Console.log 只显示一次结果,并且 addEventListener 时按钮不起作用
- react-native - 在本机反应中坐在抽屉屏幕中的组件中时标题错位
- sql - 如何查找不存在的记录?
- python - Python中的Excel文件格式绘制
- javascript - 如何在 JavaScript 中使用 PHP 中的运算符?
- excel - 使用 VBA 复制和粘贴多个单元格
- mysql - 如何使用wireshark捕获mysql查询
- python - 如何在字典中为键添加多个值
- rest - 步数与 Google Fit 应用 REST API 不匹配
- c++ - 使用 while 循环验证字符串输入