c++ - 范围问题 : which variable would a inline function access in the following code ?

标签 c++ scope inline

假设我们有以下 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/

相关文章:

c++ - 抽象工厂改进

c++ - 如何在 C++ 中更改 Latin1-UTF8 编码(可能使用 Boost)?

c++ - EXTERN 或 STATIC 用于维护许多变量

c++ - 为什么 `std::pmr::polymorphic_allocator` 不会在容器移动时传播?

c++ - std::byte 可以替换 std::aligned_storage 吗?

javascript - 更新 $scope 不影响 View

c++ - 在 C 和 C++ 文件之间共享一个全局变量

c - GCC 4.8.1 编译时在 C99 代码中有许多宏和内联函数

c++ - c++ 中内联函数的零成本列表

kotlin - 父类中 protected 内联方法无法访问其他 protected 方法