gpt4 book ai didi

c++ - 为什么内联函数需要传递参数?

转载 作者:行者123 更新时间:2023-11-30 19:54:36 28 4
gpt4 key购买 nike

内联函数的一个定义是

If a function is inline, the compiler places a copy of the code of that function at each point where the function is called at compile time.

那么我的问题是:为什么我们需要将参数传递给内联函数?

例如

void main()
{
int a = 10;
print(a);
}

inline void print(int a)
{
printf("%d",a);
}

根据上面的内联定义,不应该有编译时错误,因为编译器会将代码转换为如下内容:

void main()
{
int a = 10;
printf("%d",a);
}

最佳答案

你的结论是基于一个无效的前提。内联函数不是一种类似宏的工具,它会盲目地将函数的代码拼接到调用者的代码中。它们是对编译器的请求,要求尽可能内联函数体,但保持函数调用/执行的正常语义。换句话说,假设代码正确,内联调用和非内联调用之间的行为(当然,处理器和内存使用除外)应该没有明显的差异。

内联函数的这种定义使得它们的使用可以避免许多与宏相关的问题,例如函数中定义的局部变量与调用者中的同名局部变量发生冲突,或者调用函数时会产生副作用参数(例如 print(a++) 可以与内联函​​数一起正常工作,但不能与宏一起工作)。

由于这种设计,您提供的示例会出现编译时错误。

关于c++ - 为什么内联函数需要传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27835004/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com