1

Можно создать дубликат:
Does const-correctness give the compiler more room for optimization?C++ Уст-корректность и константные члены

В течение последних нескольких недель, я разработал вещь для создания всех моих нестатические члены const, если это возможно во избежание непреднамеренных ошибок программирования. Однако эта практика дает некоторые огромные недостатки, особенно для объектов сущностей, поскольку, например, никто больше никогда не сможет вызвать оператор присваивания, если они предпочтут агрегировать такой объект объекта напрямую, а не использовать указатель.

Вопрос в том, действительно ли эта философия элемента const предоставляет любые бонусы оптимизации компилятора.

class User { 
public: 
    User(const std::string &, const std::vector<unsigned char> &); 
    ~User(); 
    const std::string &getName() const; 
    const std::vector<unsigned char> &getPasswordHash() const; 
private: 
    std::string name; 
    std::vector<unsigned char> passwordHash; 
}; 

Будет ли это обеспечить мой компилятор с какой-либо значительными возможностями оптимизации, если это class 'членов const? Учитывая тот факт, что другие классы обычно обычно объединяют неконстантные объекты User, но почти все мои алгоритмы принимают const User &?

Значит, члены const предоставляют любые значительные возможности оптимизации по сравнению с уже существующим менталитетом const User &? И оправдывает ли это использование агрегатов const User * и восстанавливает объекты при изменении, а не использует оператор присваивания?

Спасибо за некоторые быстрые замечания!

+0

Дубликат. Пожалуйста, имейте в виду, что вы не используете const, чтобы идти быстрее, но чтобы уменьшить количество ошибок в вашей программе, объявив о намерении. –

ответ

2

выписка об этом на SO, а также HERE

+0

Мой плохой, извините. Отвечает на вопрос отлично. –

+0

О, ладно спасибо! –

1

Во-первых, примечание на словарный запас: объекты сущностей, по определению, имеют идентичность, и поэтому не поддерживают назначение. Я думаю, что вы имеете в виду объекты .

В противном случае: я вообще нашел очень мало преимуществ при создании данных членов const. Как вы заметили, это делает невозможным назначение, , что означает, что они не могут быть const для типов значений. Для объектов объектов, которые не могут быть назначены, существует некоторая ценность при создании константных констант (например, идентификатор), но поскольку все обращения находятся в небольшом блоке кода, который вы контролируете, значение значительно меньше чем для const в публичном интерфейсе.

Другая возможность заключается в определении неизменяемых типов для таких членов. Это гораздо более выразительным, чтобы определить name как Identifier чем в определить его как std::string и Identifier, даже если в нем содержится только один элемент данных с типом std::string бы ограничить то, что вы могли бы сделать с ней. (Это также облегчило бы изменение представления идентификатора позже.)

 Смежные вопросы

  • Нет связанных вопросов^_^