关于内联函数的困惑

时间:2017-08-27 09:13:37

标签: c++ function inline

我对内联函数有疑问。

#include <iostream>
using namespace std;

class A 
{
public:
    inline void fun()
    {
        int i=5;
        cout<<i<<endl;
    }
};

int main() 
{
    A a1;
    int i = 2;
    a1.fun();
    cout<<i<<endl;
    return 0;
}

在上面的程序中,当调用函数fun()时,编译器应该复制此函数并插入 main 函数体,因为它是inline

所以,我有一个问题,为什么编译器不会重新声明变量int i;的错误?

1 个答案:

答案 0 :(得分:4)

你似乎对范围感到困惑。它们不是“在同一”范围内

您可以在不同的范围内声明具有相同名称的多个变量。一个非常简单的例子如下:

int main()
{
    int a;       // 'a' refers to the int until it is shadowed or its block ends
    { 
        float a; // 'a' refers to the float until the end of this block
    }            // 'a' now refers to the int again
}

内联扩展不是纯文本替换(而不是宏)。

函数是否内联对语义没有影响否则程序的行为会有所不同,具体取决于函数是否内联,返回语句根本不会正常运行。