dong555 发表于 2022-12-2 20:53

关于C++内联函数的一个例题,square(c++)是运行函数再运行C++吗?

本帖最后由 dong555 于 2022-12-3 10:04 编辑

例题中square(c++)是相对于先执行c*c,再执行C++吗,不太理解。我觉得应该先执行C++再c*c吧
#include <iostream>
using namespace std;
inline double square(double x){return x*x;}
int main(void)
{
   int b;

    int c=13;
   cout << "b =" <<square(4.5+7.5) << endl;   cout << "c =" << c << endl;
    cout << "c square is " <<square(c++) << endl;
    cout << "now c = " << c << endl;
    return 0;
}


运行结果
b=144
c =13
c square is 169
now c = 14


RainPPR 发表于 2022-12-2 21:06

简单说:
1. 先执行 square(c)
2. 再执行 c++(c自增1)
这一行代码相当于:
cout << "c square is " <<square(c) << endl;
c = c + 1;

xiao14116 发表于 2022-12-2 21:07

不,你的理解有误,内联函数的作用是在生成二进制文件的时候把内联函数编译到调用这个内联函数内,跟执行顺序无关,简单的说,不是内联函数的话,在反编译成汇编代码以后是个独立的函数,而内联函数的代码则在调用它的函数内直接显示成汇编代码

dong555 发表于 2022-12-2 21:14

RainPPR 发表于 2022-12-2 21:06
简单说:
1. 先执行 square(c)
2. 再执行 c++(c自增1)


例题中其实 还有一句
b= square(4.5+7.5);

这个b就等于144 ,有点蒙,难道常数就先加起来,有参数就后执行

RainPPR 发表于 2022-12-2 21:26

本帖最后由 RainPPR 于 2022-12-2 21:27 编辑

https://bkimg.cdn.bcebos.com/pic/5bafa40f4bfbfbed313b490977f0f736afc31f61?x-bce-process=image/resize,m_lfit,w_1214,limit_1

百度百科上的

RainPPR 发表于 2022-12-2 21:29

dong555 发表于 2022-12-2 21:14
例题中其实 还有一句
b= square(4.5+7.5);



内联函数不影响函数名或其参数的作用域。内联函数是对编译器的请求。

yuzhangqu 发表于 2022-12-2 21:36

dong555 发表于 2022-12-2 21:14
例题中其实 还有一句
b= square(4.5+7.5);



首先,这个问题跟内联没关系。内联与否绝对不会影响程序运行的结果(最多只会影响速度)。
其次,不管是square(4.5+7.5)还是square(c++)都是先计算括号里面的参数,再调用函数。
只不过4.5+7.5得到12,c++得到c。
c++得到c是因为++放在变量后面,叫做后自增。后自增会保存自增之前的值,然后将变量+1,然后返回之前保存的旧值。

dong555 发表于 2022-12-2 21:42

yuzhangqu 发表于 2022-12-2 21:36
首先,这个问题跟内联没关系。内联与否绝对不会影响程序运行的结果(最多只会影响速度)。
其次,不管是 ...

谢谢 确实这样 把c++ 改成++c就变成196了

jiang1122 发表于 2022-12-2 21:50

感谢分享

ltg1831 发表于 2022-12-2 21:58

如果你不是学生,不建议研究这类题目
页: [1] 2
查看完整版本: 关于C++内联函数的一个例题,square(c++)是运行函数再运行C++吗?