c++ - 内联函数原型(prototype) vs 常规声明 vs 原型(prototype)

标签 c++ function-prototypes function-declaration inline-functions

inline function 和 then main 的区别是什么:

inline double cube(double side)
{
   return side * side * side;
}

int main( )
{
    cube(5);
}

vs 只是像这样定期声明一个函数:

double cube(double side)
{
   return side * side * side;
}

int main( )
{
    cube(5);
}

vs 函数原型(prototype)?

double cube(double);

int main( )
{
    cube(5);
}

double cube(double side)
{
   return side * side * side;
}

最佳答案

inline 函数可以在多个翻译单元(cpp 文件 + 包含)中定义,并提示编译器将函数内联。它通常放在 header 中,这会增加编译时间,但可以产生更快的代码。它还允许从许多编译单元使用该函数。

//cube.h
inline double cube(double side)
{
   return side * side * side;
}

//cube.cpp
int main( )
{
    cube(5);
}

定期定义它是常规方法,它(通常)在 cpp 文件中定义并链接。它不容易从其他编译单元使用。

//cube.cpp
double cube(double side)
{
   return side * side * side;
}

int main( )
{
    cube(5);
}

原型(prototype)允许您告诉编译器一个函数将在链接时存在,即使它还不存在。这允许 main 调用函数,即使它还不存在。通常,原型(prototype)位于 header 中,因此其他编译单元可以调用该函数,而无需自己定义。这具有最快的编译时间,并且该功能很容易从其他编译单元使用。

//cube.h
double cube(double);

//cube.cpp
int main( )
{
    cube(5);
}

double cube(double side)
{
   return side * side * side;
}

关于c++ - 内联函数原型(prototype) vs 常规声明 vs 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922340/

相关文章:

c++ - 无法解析类型 'std::default_random_engine'

javascript - 函数未分配给 Chrome 中另一个函数的原型(prototype)

c - 如何正确声明此功能?

c - int a, f() {} 应该编译吗?

c++ - istream::operator>> 或 istream::get

c++ - 如何使用 FFMPEG 打开文件\实时流使用 openCV 编辑每个帧并将其保存为使用 FFMPEG 文件\实时流编码?

prototype - JavaScript 原型(prototype)不工作

c++ - 如何声明模板化函数以便可以在类构造函数/函数中传递

c++ - 函数声明的返回类型中的 & 符号如何工作?

c++ - std::remove 与 vector::erase 和未定义的行为