我对内联函数有疑问。
#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;
的错误?
答案 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
}
内联扩展不是纯文本替换(而不是宏)。
函数是否内联对语义没有影响否则程序的行为会有所不同,具体取决于函数是否内联,返回语句根本不会正常运行。