我知道inline是对编译器的提示或请求,用于避免函数调用开销.
那么在什么基础上可以确定函数是否是内联的候选者?在哪种情况下应该避免内联?
我有一个有内联成员的类,但后来我决定从头中删除实现,所以我将函数的成员体移到cpp文件中.起初我刚刚在头文件中留下了内联签名(草率我),程序无法正确链接.然后我修好了标题,当然一切正常.
但是不是内联完全可选吗?
在代码中:
第一:
//Class.h
class MyClass
{
void inline foo()
{}
};
Run Code Online (Sandbox Code Playgroud)
接下来改为(不会链接):
//Class.h
class MyClass
{
void inline foo();
};
//Class.cpp
void MyClass::foo()
{}
Run Code Online (Sandbox Code Playgroud)
然后(将工作正常):
//Class.h
class MyClass
{
void foo();
};
//Class.cpp
void MyClass::foo()
{}
Run Code Online (Sandbox Code Playgroud)
我认为内联是可选的,想象我可能会因为我的邋iness警告,但没想到链接错误.在这种情况下编译器应该做的正确/标准的事情是什么,我是否应该根据标准得到我的错误?
我有一个没有构造函数的抽象C++类.它应该是一个基类,所以其他类可以继承它.我想要做的是在基类中声明一个常量变量,并在每个派生类的构造函数中初始化它,但在每个类中没有其他地方.它在C++中是否合法?如果是这样,我该怎么做?