and c++ c++11 inline standards-compliance constexpr

and - constexpr in c++



¿Constexpr implica en línea? (1)

Sí ([dcl.constexpr], §7.1.5 / 2 en el estándar C ++ 11): "las funciones constexpr y constexpr constructors están implícitamente en línea (7.1.2)".

Tenga en cuenta, sin embargo, que el especificador en inline realmente tiene muy poco (si es que tiene alguno) efecto sobre si un compilador puede expandir una función en línea o no. Sin embargo, sí afecta la regla de una definición, y desde esa perspectiva, el compilador debe seguir las mismas reglas para una función constexpr que una función en inline .

También debo agregar que, independientemente de constexpr implique en inline , las reglas para constexpr funciones constexpr requieren que sean lo suficientemente simples como para ser a menudo buenos candidatos para la expansión en línea (la principal excepción son las recursivas).

Considere la siguiente función en línea:

// Inline specifier version #include<iostream> #include<cstdlib> inline int f(const int x); inline int f(const int x) { return 2*x; } int main(int argc, char* argv[]) { return f(std::atoi(argv[1])); }

y la versión equivalente constexpr:

// Constexpr specifier version #include<iostream> #include<cstdlib> constexpr int f(const int x); constexpr int f(const int x) { return 2*x; } int main(int argc, char* argv[]) { return f(std::atoi(argv[1])); }

Mi pregunta es: ¿el especificador constexpr implica el especificador en inline en el sentido de que si se pasa un argumento no constante a una función constexpr , el compilador intentará constexpr la función como si el especificador en inline se pusiera en su declaración?

¿El estándar C ++ 11 garantiza eso?