При попытке использовать constexpr с main
как это:Почему главный не может быть constexpr?
constexpr int main()
НКУ и лязг жалуются:
error: cannot declare '::main' to be inline
error: 'main' is not allowed to be declared constexpr
Давайте посмотрим, какие требования к функции constexpr являются:
Функция constexpr должна удовлетворять следующие требования:
- он не должен быть виртуальным
- его тип возвращаемого значения должен быть LiteralType
- каждый из его параметров должны быть буквальным типа
Что такое LiteralType?
Литерал типа любые из следующего
- пустоты (так как C++ 14)
- скалярного типа
- ссылочного типа
- массива буквального типа
Что должен включать тело функции?
- нулевые заявления
- static_assert декларация
- декларации TYPEDEF и декларация псевдонимов, которые не определяют классы или перечисления
- с помощью деклараций
- с помощью директивы
- точно один оператор возврата, который содержит только буквенные значения , constexpr переменных и функций.
следующие примеры:
constexpr int main() { ; }
constexpr int main() { return 42; }
constexpr int main() {
// main defaults to return 0
}
, кажется, соответствует всем этим требованиям. Кроме того, main
- это специальная функция, которая запускается в начале программы перед всем остальным. Вы можете запускать функции constexpr из main, и для того, чтобы что-то помеченное constexpr было constexpr, оно должно запускаться в контексте constexpr.
Так почему же main
не разрешено быть constexpr?
Мне кажется, что существует одержимость некоторыми людьми использовать новые языковые возможности ** везде **, независимо от того, имеет ли это смысл. –
Будет ли это функция, необходимая для того, чтобы избавиться от 'fork' и' exec', чтобы просто выполнить '/ bin/false'? –
Также argc и argv никогда не могут быть известны во время компиляции. – StackedCrooked