189 8069 5689

侯捷C++复现:explicit在构造函数中-创新互联

首先是个这样的小数的例子,没加explicit看看是什么情况:

创新互联专注于企业营销型网站建设、网站重做改版、藤县网站定制设计、自适应品牌网站建设、HTML5建站商城网站建设、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为藤县等各大城市提供网站开发制作服务。

类:

//
// Created by 浅笑 on 2022/11/28.
//
#ifndef CLION_PJ_FRACTION_H
#define CLION_PJ_FRACTION_H
class Fraction{
public:
    Fraction(int num,int den=1):m_numerator(num),m_denominator(den){}
    Fraction operator+(const Fraction& f);
    operator double() const {
        return (double)m_numerator / m_denominator;
    }
private:
    int m_numerator;
    int m_denominator;

    friend int gcd(const Fraction& f1, const Fraction f2);
};

int gcd(const Fraction& f1, const Fraction f2){
    int m=f1.m_numerator*f2.m_denominator+f1.m_denominator*f2.m_numerator;
    int n=f1.m_denominator*f2.m_denominator;
    int r;
    while (n!=0){
        r=m%n;
        m=n;
        n=r;
    }
//    std::cout<

测试如下:

#include#include#include#include#include#include
#include#include#include#include#include#include"Fraction.h"

using namespace std;

int main()
{
    Fraction f(3,5);
    Fraction d2=f+4.0;
    cout<<(double)d2;
    return 0;
}

之后就炸了:

这里说噢,有二义性:

1.这里的f+4可以用Fraction的+运算符的重载,而这里的操作就是先把4.0由构造函数转变成Fraction类,再用重载的操作符计算。

2.也可以用double的+运算符,操作就是先直接把Fraction用double操作符转过去,再用+号计算,那么我们到底用哪个呢?不知道。

然后我们给类的构造函数加上explicit再测试一次:

explicit Fraction(int num,int den=1):m_numerator(num),m_denominator(den){}

又炸了,不过这次他说的是没有给可见的从double到Fraction的转换,显式的构造函数不是一个候选项,说明啥,我们在加了explicit之后,编译器式不会隐式调用构造函数的!所以这里是两个double相加,那么最后要从double到Fraction,我们就要显式地加上一个构造的函数。

将测试修改如下:

int main()
{
    Fraction f(3,5);
    cout<<(double)f<

结果如下所示:

那为啥不Fraction(f+4.0)呢,由于两个数据是int的,所以在初始化的时候把小数给抹去了sos。不过关键还是理解explicit辣! 

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享题目:侯捷C++复现:explicit在构造函数中-创新互联
URL链接:http://cdxtjz.cn/article/ccdhcd.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。