__inline__ __attribute__((always_inline))强制内联

有一个函数,添加了inline,但是编译器拒绝了:

#include <iostream>
#include <string>

std::string name_ = "global";

inline void fun() {
  std::cout << "global fun" << std::endl;
}

class A {
public:
  A(std::string name) : name_(name) { 
    std::cout << "construct - " << name_ << std::endl;
  }
  void fun() {
    std::cout << "local fun" <<	std::endl;
  }
  void test() {
    std::cout << name_ << std::endl;
    fun();
    ::fun();
    std::cout << ::name_ << std::endl;
  }
  ~A() {
    std::cout << "destruct - " << name_ << std::endl;
  }
private:
  std::string name_;
};

int main()
{
  A a("local");
  a.test();
  return 0;
}

输出结果如下:

$ g++ main.cc -o main.o
$ nm main.o | grep fun | c++filt
0000000100001ac0 T fun()
0000000100001a80 T A::fun()

开启强制内联,修改如下:

__attribute__((always_inline))
inline void fun() {
  std::cout << "global fun" << std::endl;
}

输出结果:

$ g++ main.cc -o main.o
$ nm main.o | grep fun | c++filt
0000000100001ac0 T A::fun()
发布了256 篇原创文章 · 获赞 13 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/105118432