【发布时间】:2018-07-09 16:08:31
【问题描述】:
我试图将包装为唯一指针的空指针作为函数的默认参数。仅使用指针,标题可能看起来像这样
double f(A* vec = nullptr);
因为我确实需要使用 unique_ptr,所以我尝试将其更改为
double f(std::unique_ptr<A>& A vec = nullptr);
或
double f(std::unique_ptr<A>& A vec = std::unique_ptr<A>(nullptr));
这会导致错误
无法将“nullptr”从“std::nullptr_t”转换为“std::unique_ptr&”
和
无法将“std::unique_ptr&”类型的非常量左值引用绑定到“std::unique_ptr”类型的右值
分别。有没有办法做到这一点?我对 C++ 比较陌生,所以答案可能很明显。
与问题无关,但对我选择 unique_ptr 的解释:参数 vec 用作 f 中迭代的起始值,并与指针一起返回改进的值。计划是,如果没有给出起始值,则将指针设置为 nullptr,并在程序期间计算起始值。但是,由于我生成了一个新对象,所以从我看来,在裸指针上使用 unique_ptr 会更安全。
【问题讨论】:
-
你是通过
vec返回值吗? -
如何为引用变量设置默认值?它会参考什么?
-
我认为在这里使用重载可能会更好,因为在无参数情况下会有额外的逻辑。
-
您可以存储对唯一指针的 const 引用,这仍然允许您访问原始指针。
-
这就是为什么我更喜欢使用哑指针作为函数参数的原因。在进行函数调用时,您始终可以在
unique_ptr上使用get来获取其内部指针。
标签: c++ c++11 pointers unique-ptr