const double* constArr = new const double [];
for(int i =0;i<n;i++)
cin >>constArr[i];
那样的东西?是否可以输入const double数组?
答案 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);
}