C ++ 17: Определение функций элемента stati c constexpr в файле. cpp - PullRequest
0 голосов
/ 31 января 2020

У меня есть функция-член statex c constexpr, которую я объявляю в файле .h. Если я сразу определю функцию в заголовочном файле, все будет отлично. У меня есть общая склонность определять функции в файле. cpp (даже если я хочу, чтобы они были встроенными, я использовал бы ключевое слово inline и снова делал бы это), поэтому я, когда я пытаюсь это сделать, сначала кажется, что все в порядке, но когда я пытаюсь вызвать эту функцию, я получаю следующую ошибку:

static constexpr uint16_t ClassA::myFoo()' used before its definition

Я хотел бы узнать, есть ли способ определения функции-члена stati c constexpr в. cpp файл, а не заголовок. Если это невозможно или может быть ограничено из-за используемого мной компилятора, есть ли побочные эффекты, определяющие функцию в файле .h? (Я знаю, что он явно встроен для нормальных функций, но я не уверен, что функция constexper stati c).

PS: я использую arm-none-eabi-g ++ (c ++ 17) и Clion для небольшого встроенного проекта.

1 Ответ

3 голосов
/ 31 января 2020

Я хотел бы узнать, есть ли способ определения функции-члена stati c constexpr в файле. cpp вместо заголовка.

Да ... но вы должны определить функцию в каждом TU, где она используется, потому что это встроенная функция. Таким образом, проще поместить определение в заголовок, чтобы одно и то же определение было включено во все TU, которые в нем нуждаются.

Это встроенная функция, поскольку функции constexpr являются неявно встроенными функциями - т.е. Вы не используете ключевое слово inline.

Есть ли побочные эффекты, определяющие функцию в файле .h?

Эффект из Это означает, что определение функции будет включено в каждый TU, который включает заголовок. Я не совсем понимаю, что вы подразумеваете под «побочным» эффектом в этом контексте.

...