(Edit: Тяжелое изменение, потому что предыдущий пример был испорчен, что может привести к тому, что некоторые ответы/комментарии кажутся нечетными)
Это может быть чрезмерно надуманным, но следующее является законным из-за отсутствия конструктора const:
class Cheater
{
public:
Cheater(int avalue)
: cheaterPtr(this) //conceptually odd legality in const Cheater ctor
, value(avalue)
{}
Cheater& getCheaterPtr() const {return *cheaterPtr;}
int value;
private:
Cheater * cheaterPtr;
};
int main()
{
const Cheater cheater(7); //Initialize the value to 7
cheater.value = 4; //good, illegal
cheater.getCheaterPtr().value = 4; //oops, legal
return 0;
}
Кажется, что предоставление конструктора const может быть таким же простым, как и методы const, и быть аналогичным перегрузке const.
Примечание. Я не ищу 'Image( const Data & data ) const
', а скорее 'const Image( const Data & data) const
'
Итак:
- Почему конструктор const отсутствует в С++?
Вот некоторые связанные материалы для контекста: