what c++ inline explicit constructor is good for?
我有时看到这个构造函数使用内联显式编写。例如:
1 2 3 4 5 6 7 8 9
| protected :
inline explicit Singleton() {
CCASSERT(Singleton::instance_ == 0,"error Singleton::instance_ == 0.");
Singleton::instance_ = static_cast<T*>(this);
}
inline ~Singleton() {
Singleton::instance_ = 0;
} |
对于什么内联显式是好的?
- inline和explicit是两个不同的关键字。所以我猜你是在问,explicit是什么意思,这里已经回答过了。
- 你是在问inline和explicit的组合吗?因为这不会给这两个修饰符的各自行为添加任何内容。
- @Zeta,但是没有任何构造函数参数的explicit有什么意义呢??
- 在一个无ARG构造函数中显式在C++ 11中是有意义的,以规避支撑初始化。
- 顺便说一句,据我所知,如果您将函数体放在类的右侧,那么默认情况下函数是内联的。
- @π?ε?ε?,请参见显式默认构造函数的用途。
- @fr&233;d&233;richamidi thx,很高兴知道。这里的答案是,explicit对于OP来说是多余的。
如果你是在inlinedefine a函数,在a的头球,但不是在一个类的定义。它可以被定义在多功能翻译单位(IU当包括在来自多个源的头文件)。目的是让一个内联函数调用编译器的编译器需要一个定义在翻译单元是可用的命令做的。
它不在本案例:函数定义在一个类定义是implicitly内联。
explicit意味的构造函数不能被用于隐式类型转换。制造historically镰刀,它只有单参数constructors天;但我认为它也可以用来防止initialisation支撑管。
本案例中,它是不constructors:默认不用于隐式转换。
for what inline explicit is good for ?
在这里,他们都给作者的程度-有用的代码值和过多过verbiage结构清晰。这是进一步的循证由使用的反模式(单胎面在这个代码。
- +1:但是我要说明,在类定义中,inline对于其中定义的所有函数都是隐式的。
- @事实上,这就是我在第二段中陈述的原因。
- @它不是重言式的——它的目的是允许多个定义(因此允许在多个翻译单元中嵌入)。如您所说,如果没有它,就不允许有多个定义。
- 对于大括号初始化,显式构造函数应该进行复制初始化,T t = {};是非法的,但是T t{};应该是正常的。尽管一般合同条款第4.8.2款似乎允许前者。我觉得那是个虫子。
他们是一explicitconstructors implicitly停止使用。
告诉编译器是一个单inline(叶olden天当我们的位置,这样的RAM)的功能是它想要的东西D内联。当然,他们也在今日美国,或美国"最幽默,我会把它在advisement"潜台词"愚蠢的人认为,我不是已经知道了吗?"(inline天短,忽略的是,编译器是一个更好的位置比美国多,决定到内联)。