我想知道为什么编译时出错:
const std::unique_ptr<int> get() {
return std::make_unique<int>(10);
}
int main() {
const std::unique_ptr<int> value = get();
return EXIT_SUCCESS;
}
我收到以下错误:
main.cpp: In function ‘int main()’:
main.cpp:10:44: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’
const std::unique_ptr<int> value = get();
当我从get
的签名中删除const
时,它可以正确编译。
有没有办法返回一个常量 unique_ptr
?
有没有办法返回一个常量unique_ptr?
std::unique_ptr
对象应该是常量,还是其所指向的数据? - Some programmer dudeconst
指针会使移动/交换变慢,但是总的来说,有些情况下使用const指针是有意义的。 - Mooing Duckunique_ptr
是常量,尽管在添加像unique_ptr
这样的不可复制类型之前,const
返回值已经足够奇怪了,而且你没有解释为什么你认为你想要这种奇怪的东西。我觉得“为什么我不能做[没有明显理由的奇怪事情]”这样的问题是没有用的,否则我可以花一整天发明和发布它们。 - underscore_dconst
指针是一个好主意,至少如果我们重视const
的正确性。当然,如果我们对函数签名有完全控制,应该使用引用。但是,我想到的一个简单的例子是,在持有指针的容器中对范围进行find_if
等stdlib算法操作(reference_wrapper
似乎不值得麻烦,而且本身也应该是const
!)。如果在接收函数内部意外地改变了指针的可能性,并且发生了这种情况,那么结果将不会很好。 - underscore_d