gpt4 book ai didi

c++ - C 中的内联参数是否复制了两次?

转载 作者:太空狗 更新时间:2023-10-29 23:26:16 26 4
gpt4 key购买 nike

我有一个关于 C/C++ 中的内联函数和参数复制的问题。假设我想在没有内联说明符的情况下运行此函数:

void my_func(int param)
{
my_inner_func(param);
}

param 将首先复制到 my_func,然后再复制到 my_inner_func。如果函数 my_funcinline,编译器会只为 my_inner_func 参数复制一次 param 还是复制两次?

编辑

我想问一下 C 和 C++ 的解释。

最佳答案

C 和 C++ 都根据抽象机指定程序的行为。

my_funcint param存在于这个抽象机中,它不同于my_inner_funcint param。他们有不同的身份。如果您取其中一个的地址和另一个的地址,则保证它们比较不相等。

但是,如果您不获取其中任何一个的地址,则两者都不需要地址。

如果你对一个 int 所做的只是分配或初始化它,然后用它来分配或初始化另一个 int,编译器可以证明没有定义的方式通过间接访问(如指针)到达中间 int,则中间 int 不需要存在于实际目标机器上。

某些编译器在链接时执行此操作时会遇到问题。其他人没有。

一些操作会阻止 int 的存在被省略。其他人不会。

我在您的示例中看不到任何需要中间 int 存在于目标机器上的内容。

关于c++ - C 中的内联参数是否复制了两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44157188/

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