Betrachten Sie die folgende Inline-Funktion:
// 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]));
}
und die constexpr äquivalente Version:
// 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]));
}
Meine Frage ist: constexprBedeutet der Bezeichner den Bezeichner inlinein dem Sinne, dass constexprder Compiler , wenn ein nicht konstantes Argument an eine Funktion übergeben wird, versucht, inlinedie Funktion so auszuführen, als ob der Bezeichner inlinein seine Deklaration aufgenommen worden wäre?
Garantiert der C ++ 11-Standard dies?
inlineSpezifizierer hat nichts mehr mit Inlining
inlinein direktem Zusammenhang mit Inlining steht. Also nein, der constexprSpezifizierer impliziert den inlineSpezifizierer nicht in diesem Sinne, da dieser Sinn nicht existiert.
inlineSpezifizierer tut. (Oder vielleicht habe ich Ihre Formulierung falsch verstanden.)