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

use*_*898 4 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; 
    }
Run Code Online (Sandbox Code Playgroud)

内联显式有什么用?

Mik*_*our 9

inline如果在标题中定义函数,但在类定义中没有定义函数,则是必需的.它允许在多个转换单元中定义函数(即,当包括来自多个源文件的头时).目的是允许编译器内联对函数的调用 - 许多编译器要求在翻译单元中提供定义才能执行此操作.

在这种情况下,它是没有意义的:在类定义中定义的函数是隐式内联的.

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

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

内联显式有什么用?

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