【发布时间】:2022-08-04 05:15:07
【问题描述】:
为什么 std::unique_ptr 的 \'operator*\' 成员函数可以标记为 const (https://en.cppreference.com/w/cpp/memory/unique_ptr/operator*) 而函数如 \'front()\'、\'back()\'、\'operator[]\' std::vector 中的 etc 不被标记为 const?两者都返回对他们管理的资源的非常量引用。
核心问题是我无法理解第一部分,即为什么我们能够将 \'operator*\' 标记为 const,即当 \'*this\' 时返回类型如何是 \'T&\'该函数中的指针将是一个 const 指针(由于该函数被标记为 const)?
-
std::vector具有begin、front和operator[]的 const 版本 -
std::unique_ptr::operator*不会改变唯一指针的内部状态 - 所以它应该被标记为const -
因为
operator*不能改变指针。const unique_ptr<char> ptr与char* const ptr变量具有相同的语义 - 您可以更改指向的内容,但不能将指针重定向到其他地方。 -
*this不是指针,它是const unique_ptr<T>,这并不意味着T是 const。也就是说,const unique_ptr<T>不是“喜欢”const T*,而是“喜欢”T* const。 (这有助于根本不将智能“指针”视为指针,因为它们不是。它们只是常规类。) -
这似乎是对有关\"const pointer\" vs \"pointer to const\" 的许多问题的新看法。
标签: c++ unique-ptr const-correctness