什么是c ++内联显式构造函数?

时间:2014-03-24 13:31:25

标签: c++ inline

我看到有时这个构造函数使用内联显式编写。 例如:

protected : 
    inline explicit Singleton() { 

        CCASSERT(Singleton::instance_ == 0, "error Singleton::instance_ == 0."); 
        Singleton::instance_ = static_cast<T*>(this); 
    }
    inline ~Singleton() { 
        Singleton::instance_ = 0; 
    }

对于内联显式有什么用处?

2 个答案:

答案 0 :(得分:9)

如果在标题中定义函数,而在类定义中没有定义函数,则需要

inline。它允许在多个转换单元中定义函数(即,当包括来自多个源文件的头时)。目的是允许编译器内联对函数的调用 - 许多编译器要求在翻译单元中提供定义以便这样做。

在这种情况下,它毫无意义:类定义中定义的函数是隐式内联的。

explicit表示构造函数不能用于隐式类型转换。从历史上看,它只适用于单参数构造函数;但我想现在它也可以用来防止支撑初始化。

在这种情况下,它也毫无意义:默认构造函数不用于隐式转换。

  

对于内联显式有什么用处?

在这里,他们都提供了有用的代码气味 - 作者重视措辞和过度清晰的结构。通过使用Singleton反模式进一步证明了这一点 - 在此代码中谨慎使用。

答案 1 :(得分:-2)

带有构造函数的

explicit会阻止它们被隐式使用。

inline是一种告诉编译器的方法(在我们缺少RAM的那些日子里),该函数是它想要内联的东西。当然,现在他们忽略了我们,或者至多幽默我们用#34;我会接受它的建议&#34;以及#34; Silly human的潜台词,认为我已经不知道了?&#34; (简而言之,这些天忽略了inline,编译器处于比我们更好的位置来决定内联)。