是否可以输入const double数组?

时间:2018-02-13 17:27:57

标签: c++ arrays

const double* constArr = new const double [];
for(int i =0;i<n;i++)
cin >>constArr[i];

那样的东西?是否可以输入const double数组?

1 个答案:

答案 0 :(得分:1)

最干净的解决方案是使用工厂函数将元素添加到非const容器中,然后将其移动到常量容器中。你不应该使用原始拥有指针,所以我会把它改为unique_ptr,这将允许你或多或少地做同样的事情,当指针​​被销​​毁时自动删除数组的额外好处

std::unique_ptr<double[]> create_my_array(size_t n) {
    auto my_array = std::make_unique<double[]>(n);
    for(size_t i = 0; i < n; ++i)
        cin >> my_array[i];
    return my_array;
}

然后你可以做

 std::unique_ptr<const double[]> const_array = create_my_array(n);

您可以使用new double[]执行与函数非常相似的操作,返回指针并将其存储为const double *的被调用者,但该方法不会再实现,并且容易泄漏内存。

如果您根本不想使用某个功能,例如因为此功能在整个程序中只需要一次,您可以使用带有作用域unique_ptr<double>的相同构思,然后将其移入const版本

std::unique_ptr<const double[]> const_array;
{  // Enclosing this in a block makes the non const pointer unavailable after we've filled it
    auto my_array = std::make_unique<double[]>(n);
    for (size_t i = 0; i < n; ++i)
        std::cin >> my_array[i];
    const_array = std::move(my_array);
}
相关问题