explicit关键字在C++中意味着什么?
我知道你可以使用C++关键字'explicit'作为类的构造函数来防止类型的自动转换.您是否可以使用相同的命令来阻止类方法的参数转换?
我有两个类成员,一个将bool作为参数,另一个是unsigned int.当我用int调用函数时,编译器将param转换为bool并调用错误的方法.我知道最终我将替换bool,但是现在不想破坏其他例程,因为这个新例程已经开发出来了.
我构建了以下最小的示例:
class A
{
public:
A(const char *s);
private:
const char *p;
};
A::A(const char *s)
: p(s)
{
}
A foo()
{
return false;
}
A bar()
{
return true;
}
Run Code Online (Sandbox Code Playgroud)
与g++ (Debian 4.7.2-5) 4.7.2我一起编译得到以下内容:
t.cc: In function 'A foo()':
t.cc:17:10: warning: converting 'false' to pointer type for argument 1 of 'A::A(const char*)' [-Wconversion-null]
t.cc: In function 'A bar()':
t.cc:23:10: error: could not convert 'true' from 'bool' to 'A'
Run Code Online (Sandbox Code Playgroud)
据我所知,如果类有构造函数,则可以使用一种类型T而不是类的实例.在这种情况下,T的值/实例由编译器在对构造函数的调用中包装.AAA(T)A(T)
此外,只有一个直接隐式转换是允许的,即没有链 …