Сообщение constinit ~ к чему такое ограничение от 23.09.2023 12:51
Изменено 23.09.2023 13:10 Sm0ke
constinit ~ к чему такое ограничение
Привет
constinit спецификатор переменной указывает, что её начальное значение должно быть вычисленно в compile-time
( с использованием consteval/eonctexpr функций или ещё как )
Однако остаётся возможность менять состояние этой переменной в run-time
А теперь вопрос: Почему они в стандарте решили запретить указание constinit для локальных "не статических не thread storage duration" переменных внутри функции?
Следовательно этот пример не компилируется: https://godbolt.org/z/qb7zWdenM
И приходится такую простую штуку переписывать вот так: https://godbolt.org/z/v9evjGaaa
Понятное дело что это упрощённый пример. Предполагается, что нестатическая переменная будет ещё как использована (с возможностью изменения).
constinit спецификатор переменной указывает, что её начальное значение должно быть вычисленно в compile-time
( с использованием consteval/eonctexpr функций или ещё как )
Однако остаётся возможность менять состояние этой переменной в run-time
А теперь вопрос: Почему они в стандарте решили запретить указание constinit для локальных "не статических не thread storage duration" переменных внутри функции?
Следовательно этот пример не компилируется: https://godbolt.org/z/qb7zWdenM
int main()
{
constinit int i{0}; // error
return i;
}
error: 'constinit' can only be applied to a variable with static or thread storage duration (gcc)
error: local variable cannot be declared 'constinit' (clang)
И приходится такую простую штуку переписывать вот так: https://godbolt.org/z/v9evjGaaa
int main()
{
static constinit int si{0};
int i = si;
return i;
}
Понятное дело что это упрощённый пример. Предполагается, что нестатическая переменная будет ещё как использована (с возможностью изменения).
constinit ~ к чему такое ограничение
Привет
constinit спецификатор переменной указывает, что её начальное значение должно быть вычисленно в compile-time
( с обращениям к consteval/eonctexpr функциям или ещё как )
Однако остаётся возможность менять состояние этой переменной в run-time
А теперь вопрос: Почему они в стандарте решили запретить указание constinit для локальных "не статических не thread storage duration" переменных внутри функции?
Следовательно этот пример не компилируется: https://godbolt.org/z/qb7zWdenM
И приходится такую простую штуку переписывать вот так: https://godbolt.org/z/v9evjGaaa
Понятное дело что это упрощённый пример. Предполагается, что нестатическая переменная будет ещё как использована (с возможностью изменения).
constinit спецификатор переменной указывает, что её начальное значение должно быть вычисленно в compile-time
( с обращениям к consteval/eonctexpr функциям или ещё как )
Однако остаётся возможность менять состояние этой переменной в run-time
А теперь вопрос: Почему они в стандарте решили запретить указание constinit для локальных "не статических не thread storage duration" переменных внутри функции?
Следовательно этот пример не компилируется: https://godbolt.org/z/qb7zWdenM
int main()
{
constinit int i{0}; // error
return i;
}
error: 'constinit' can only be applied to a variable with static or thread storage duration (gcc)
error: local variable cannot be declared 'constinit' (clang)
И приходится такую простую штуку переписывать вот так: https://godbolt.org/z/v9evjGaaa
int main()
{
static constinit int si{0};
int i = si;
return i;
}
Понятное дело что это упрощённый пример. Предполагается, что нестатическая переменная будет ещё как использована (с возможностью изменения).