Ví dụ, giả sử tôi có một lớp:Trong c + +, tại sao trình biên dịch chọn hàm không const khi const cũng làm việc?
class Foo
{
public:
std::string& Name()
{
m_maybe_modified = true;
return m_name;
}
const std::string& Name() const
{
return m_name;
}
protected:
std::string m_name;
bool m_maybe_modified;
};
Và ở một nơi khác trong mã, tôi có một cái gì đó như thế này:
Foo *a;
// Do stuff...
std::string name = a->Name(); // <-- chooses the non-const version
Có ai biết lý do tại sao các trình biên dịch sẽ chọn không const phiên bản trong trường hợp này?
Đây là một ví dụ khá khó, nhưng vấn đề thực tế chúng tôi đang cố gắng giải quyết là tự động lưu một đối tượng theo định kỳ nếu nó đã thay đổi và con trỏ phải không phải vì nó có thể bị thay đổi tại một thời điểm nào đó.
Nếu bạn muốn thay đổi một số biến trong hàm const, hãy sử dụng thuộc tính chung. – ypnos
Bạn có nghĩa là "có thể thay đổi" – Lev
... và "biến thành viên", tôi đoán vậy. – Niklas