我今天遇到了类似的代码片段,这让我很好奇。我自己做了一个小实验,如下所示。
为什么第一个具有共享指针的stuff
函数允许修改值,而第二个则不允许?
#include <memory>
void stuff(const std::shared_ptr<int> &var)
{
*var = 5;
}
void stuff(const int* &var)
{
*var = 5;
}
int main()
{
auto a = std::make_shared<int>();
stuff(a);
int* b;
stuff(b);
return 0;
}
这两种类型:
const std::shared_ptr<int>
const int*
(又名int const*
(
根本不同:
- 第一个是指向
int
的const
指针 - 第二个是指向
const int
的指针
不允许修改指针对象的版本的等效shared_ptr
将是std::shared_ptr<const int>
。
允许修改指针对象的版本的原始指针等效为int* const
。
修改指针的能力和修改指向对象的能力是不同的