相关疑难解决方法(0)

避免在构造函数中进行隐式转换。'explicit'关键字在这里没有帮助

我能够避免使用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)

c++ c++11

55
推荐指数
6
解决办法
2877
查看次数

如何防止隐式转换double - > int?

问题如上,更多详情如下:

我有一堂课Money要处理......好吧,你猜对了.我非常严格,不允许Moneydouble互动(*),所以下面的代码是没有可能的:

Money m1( 4.50 );
double d = 1.5;
Money m2 = m1 * d; // <-- compiler error
Run Code Online (Sandbox Code Playgroud)

现在我想允许乘Moneyint,如"你有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)

c++ casting

19
推荐指数
3
解决办法
5684
查看次数

标签 统计

c++ ×2

c++11 ×1

casting ×1