我看到有时这个构造函数使用内联显式编写。 例如:
protected :
inline explicit Singleton() {
CCASSERT(Singleton::instance_ == 0, "error Singleton::instance_ == 0.");
Singleton::instance_ = static_cast<T*>(this);
}
inline ~Singleton() {
Singleton::instance_ = 0;
}
对于内联显式有什么用处?
答案 0 :(得分:9)
inline
。它允许在多个转换单元中定义函数(即,当包括来自多个源文件的头时)。目的是允许编译器内联对函数的调用 - 许多编译器要求在翻译单元中提供定义以便这样做。
在这种情况下,它毫无意义:类定义中定义的函数是隐式内联的。
explicit
表示构造函数不能用于隐式类型转换。从历史上看,它只适用于单参数构造函数;但我想现在它也可以用来防止支撑初始化。
在这种情况下,它也毫无意义:默认构造函数不用于隐式转换。
对于内联显式有什么用处?
在这里,他们都提供了有用的代码气味 - 作者重视措辞和过度清晰的结构。通过使用Singleton反模式进一步证明了这一点 - 在此代码中谨慎使用。
答案 1 :(得分:-2)
explicit
会阻止它们被隐式使用。
inline
是一种告诉编译器的方法(在我们缺少RAM的那些日子里),该函数是它想要内联的东西。当然,现在他们忽略了我们,或者至多幽默我们用#34;我会接受它的建议&#34;以及#34; Silly human的潜台词,认为我已经不知道了?&#34; (简而言之,这些天忽略了inline
,编译器处于比我们更好的位置来决定内联)。