对于这方面的东西我曾经写过一些小讨论看一下
使用对象内嵌自定义构造函数可以消除一些隐式的类型转换。当然你也可以使用explicit来显式声明构造函数避免他被你“无意识情况下调用成为c++完美支持自定义类型牺牲品”。
举个例子:
class Example
{
public:
...
Example( int i ) : m_Member(i) {};
friend BOOL operator == ( Example A, Example B );
BOOL DoSomething( Example& A )
{
return (A == m_Member); //这里虽然没有匹配==操作的类型,但是编译器
//会发现构造函数 可以将int转化为可以比较的对象形式
//它就去做而不管你是否可能因为手误或是什么
//结果可想而知了^_^
};
...
private:
int m_Member;
};
对于以上隐式转化的问题稍微提一下,可以用explicit消除,也可以使用内嵌单变量对象构造函数来减少自动隐士转化的概率。随便说一下多元构造函数不会带来隐士转化的问题。