【问题标题】:Is there a way to initialize an array with a buffer at time of declaration?有没有办法在声明时用缓冲区初始化数组?
【发布时间】:2014-12-31 17:18:09
【问题描述】:

基本上,我正在尝试这样做:

char x[] = "hello";
char* y = new char[sizeof(x)](x); // won't work.

demo

有没有办法干净地做到这一点?请勿使用原始数组或原始指针,请不要使用 cmets。

【问题讨论】:

  • 不使用原始数组或原始指针是什么意思?你问的不是这个吗?
  • 如果您按照标签的建议使用 C++11,那么您可以使用 std::array in the manner shown here
  • std::string 是干净利落的方式。
  • @Daniel 他要求我们不要像DO NOT USE raw arrays, or raw pointers那样做cmets

标签: c++ c++11


【解决方案1】:

只写一个函数。

template<typename T, size_t N>
T* new_array(T const(&arr)[N])
{
    T* p = new T[N];
    std::copy(std::begin(arr), std::end(arr), p);
    return p;
}

int main()
{
    char x[] = "hello";
    char* y = new_array(x);
}

【讨论】:

    【解决方案2】:

    C 方式:

    char* y = strdup(x);
    free(y);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      • 2023-01-31
      • 2014-11-28
      • 2023-03-08
      • 2012-07-18
      • 1970-01-01
      • 2012-03-03
      相关资源
      最近更新 更多