有一个函数,添加了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()