假设我们有以下 C++ 代码:
int a = 10;
inline int add(int x){return a+x;}
void foo(int a, int b)
{
... do something with a ...
std::cout<<add(b);
}
int main()
{
foo(12);
}
对于内联函数add,它使用的“a”变量是全局变量“a”。但是,在 foo() 的函数调用中,我们有另一个局部变量“a”。 如果add不是内联函数,它肯定会使用全局“a”,但是上面的代码会发生什么呢?有什么规则吗?
最佳答案
这个内联函数
int a = 10;
inline int add(int x){return a+x;}
处理全局变量a
当编译器解析函数定义时,它必须知道 a
是如何定义的,如果前面没有声明 a
的语句,编译器将发出错误。
因此,在此函数定义中,编译器引用全局变量 a
,具体取决于函数内联的位置。
还要考虑到与 lambda 表达式相反的函数无法捕获局部变量。
根据 C++ 标准,函数不能在其他函数中定义。尽管有些编译器有自己的语言扩展。在这种情况下,您应该阅读具有此类扩展名的编译器附带的文档。
关于c++ - 范围问题 : which variable would a inline function access in the following code ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31629402/