【问题标题】:How Do I Use a Variable in new[]'s Value Initialization如何在 new[] 的值初始化中使用变量
【发布时间】:2026-01-20 18:50:02
【问题描述】:

所以当newing 一个chars 的数组时,我可以初始化:

const char* foo = new char[4]{'J', 'o', 'n', '\0'};

我想知道的是如何在initializer_list中使用变量:

const string initializer{"jon"};
const char* foo = new char[4]{initializer.c_str()}; // This doesn't work, can I make it work?

【问题讨论】:

  • 在这里快速评论一下,我知道在 C++11 中我应该使用自动指针或strings。我试图了解 new 值初始化在概念上的工作原理,在我的代码中使用它。
  • const char* foo = new char[4]{initializer[0], initializer[1], initializer[2], initializer[3]}; 如果你真的坚持的话。或者干脆分配,然后strcpy(或std::copy或类似)。
  • @IgorTandetnik 我想这确实回答了这个问题:J 我希望一些不那么明确的东西。

标签: c++ variables c++11 new-operator initializer-list


【解决方案1】:

您可以使用变量,但不能使用字符串并期望编译器神奇地将其拆分。

const char* ip = initializer.c_str();
const char* foo = new char[4]{ip[0], ip[1], ip[2], ip[3]};

但是,一旦你有一个可变长度,这根本不起作用。您只需分配然后使用string::copy 在单独的步骤中填充数组。

【讨论】: