C++正在修改常量指针引用值



我今天遇到了类似的代码片段,这让我很好奇。我自己做了一个小实验,如下所示。

为什么第一个具有共享指针的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*(

根本不同:

  • 第一个是指向intconst指针
  • 第二个是指向const int的指针

不允许修改指针对象的版本的等效shared_ptr将是std::shared_ptr<const int>

允许修改指针对象的版本的原始指针等效为int* const

修改指针的能力和修改指向对象的能力是不同的

最新更新