我能够避免使用explicit关键字进行构造函数的隐式转换。因此,现在A a1 = 10;可以避免类似的转换。
但是我仍然可以初始化A a1 = A(20.2);。如何禁用对象创建,以便仅当我们将整数作为参数传递时才能创建对象A a1 = A(10)?
#include <iostream>
class A
{
public:
explicit A(int a)
{
num = a;
}
int num;
};
int main()
{
A a1 = A(10.0);
std::cout << a1.num;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 问题如上,更多详情如下:
我有一堂课Money要处理......好吧,你猜对了.我非常严格,不允许Money和double互动(*),所以下面的代码是没有可能的:
Money m1( 4.50 );
double d = 1.5;
Money m2 = m1 * d; // <-- compiler error
Run Code Online (Sandbox Code Playgroud)
现在我想允许乘Money用int,如"你有6个饼每个$ 4.50的(所以去什么地方找到更便宜的蛋糕)."
class Money
{
Money();
Money( const Money & other );
explicit Money( double d );
...
Money & operator*=( int i );
...
}
inline const Money operator*( const Money & m, int i ) { return Money( m ) *= i; }
inline const Money …Run Code Online (Sandbox Code Playgroud)