C++ const std::共享\u ptr和const正确性
假设我有一节课C++ const std::共享\u ptr和const正确性,c++,C++,假设我有一节课 class K { public: int k = 0; void Change() { k++; } void None() const { std::cout << "None \n"; } }; 为什么像这样在常量引用上使用非常量方法是完全正确的 void FN(const std::shared_ptr<K>& k) { k->
class K
{
public:
int k = 0;
void Change()
{
k++;
}
void None() const
{
std::cout << "None \n";
}
};
为什么像这样在常量引用上使用非常量方法是完全正确的
void FN(const std::shared_ptr<K>& k)
{
k->Change();
}
指针是常量,而不是对象。您不能更改指针指向的对象,但可以更改该对象 如果需要一个常量对象,则需要:
void FN(const std::shared_ptr<const K>& k)
{
k->Change();
}
另请参见:了解您可能根本不想使用常量共享参数的原因。指针是常量,而不是对象。您不能更改指针指向的对象,但可以更改该对象 如果需要一个常量对象,则需要:
void FN(const std::shared_ptr<const K>& k)
{
k->Change();
}
另请参见:了解您可能根本不想使用const shared_ptr参数的原因。因为此处的const是共享指针,而不是它指向的对象 如果您希望该值为常量,则需要:
void FN(const std::shared_ptr<const K>& k)
// ^^^^^
顺便说一句,我知道这只是一个示例代码,但您确实应该将您的成员变量k设置为私有而不是公共。如果没有它,您的类的用户甚至不需要Change函数,他们可以随心所欲地更改它:-,因为这里的常量是共享指针,而不是它指向的对象 如果您希望该值为常量,则需要:
void FN(const std::shared_ptr<const K>& k)
// ^^^^^
顺便说一句,我知道这只是一个示例代码,但您确实应该将您的成员变量k设置为私有而不是公共。否则,类的用户甚至不需要更改函数,他们可以随意更改:-除非您将所有权传递给FN,否则参数应为void FNK const&k…除非您将所有权传递给FN,否则参数应为void FNK const&k。。。