2014-11-14 2 views
13

Я знаю, что C++ 11 позволяет указывать выражения для времени компиляции, а не времени выполнения, используя constexpr.Когда нужно установить конструктор как constexpr?

Я знаю, что это может быть сделано и для конструктора класса. Однако этот конструктор должен инициализировать все члены класса, чтобы использоваться как constexpr (во время компиляции), и любые функции, которые он вызывает, также должны быть отмечены как constexpr.

Но когда будет установлен его конструктор на constexpr, и есть ли другие преимущества, кроме небольшой оптимизации?

Будет ли это означать, что если я МОЖЕТ, я ВСЕГДА должен установить мой конструктор как constexpr?

+0

Возможный конфликт может заключаться в том, что использование большого количества объектов 'constexpr' увеличивает время компиляции. И это не означает, что это никогда не стоит. – Snps

ответ

12

Создав конструктор constexpr, вы разрешаете пользователям создавать объекты constexpr и использовать их в своих собственных постоянных выражениях. Это делает класс более дружественным в некоторых случаях; например, при программировании встроенной системы, где вы хотите поместить данные в постоянную память, если это возможно.

Итак, с точки зрения того, чтобы сделать класс максимально гибким и в целом полезным, вы должны сделать это, если сможете.

+0

Можете ли вы объявить конструктор 'constexpr', если члены класса могут быть созданы как' constexpr'? –

+0

@GiovanniBotta: Правильно. –

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