专栏首页C/C++基础C++构造函数体内赋值与初始化列表的区别

C++构造函数体内赋值与初始化列表的区别

1.C++构造函数初始化列表处提示出现 error: expected ‘{’ before ‘this’

问题描述下: Linux环境运行,使用g++编译,贴上如下代码出错处已标注于代码中。 代码如下:

User(string& userName, string& password, string& nickname, uint8& state, string& IP, string& latestLoginTime, uint8& gender, string& mobile, string& email, string& image, string& signature, string& birthday):
this->userName(userName),//提示这里出错
this->password(password),
this->nickname(nickname),
this->state(state),
this->IP(IP),
this->latestLoginTime(latestLoginTime),this->gender(gender),this->mobile(mobile),this->email(email),this->image(image),this->signature(signature),this->birthday(birthday){};

这个问题困扰我很久,一直找不到错误的原因。在得知网友点拨后,才知道其原因是类对象完成初始化之前,类对象还未成形,不能使用this指针。以上问题的解决方案就是去掉this。


2.初始化列表中不能使用this,那构造函数体内是否可以使用this呢?

答案是,当然可以,因为构造函数对成员数据的初始化在是在初始化列表中完成的,构造函数体内对数据成员所做的工作仅仅是赋值操作,在此之前,类成员数据已经完成了初始化工作,是由其默认构造函数完成的。所以,这也是编程原则中尽量使用初始化列表的原因。 验证代码如下:

class someClass{
    int num;
    string studentNmae;

public:
    someClass(const int& num,const string& name) :this->num(num),this->studentNmae(name)
    {}
};

以上代码编译不会通过,但是将类成员数据的初始化改为赋值,则没有问题,代码修改如下:

class someClass{
    int num;
    string studentNmae;
public:
someClass(const int& num,const string& name)
{
this->num=num;
        this->studentNmae=name;
}
};

参考文献

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++构造函数体内赋值与初始化列表的区别

    Linux环境下,使用g++编译以下使用初始化列表的代码时出现编译错误error: expected '{' before 'this'。

    Dabelv
  • 计算机基础知识

    攻击过程如下: 1. 攻击者通过MIM(比如arp欺骗等)劫持server与客户端浏览器之间的http包; 2. 攻击者生成一对伪造的RSA密钥: fa...

    Dabelv
  • 野指针

    指向非法的内存地址指针叫作野指针(Wild Pointer),也叫悬挂指针(Dangling Pointer),意为无法正常使用的指针。

    Dabelv
  • 【云+社区年度征文】前端实现仿微博@功能&&qrcode根据url转换成二维码

    我们目前有三个平台 分别是淘宝抖音快手(搞数据爬虫的),看了一下微博的大概发布逻辑,微博是前端给后端一个@马总 或者 #马总真棒# 后端把它转成标签的格式例如...

    河湾欢儿
  • SDK热更系列之Demo体验方法

    子勰
  • 翻译 | Qt 5.15中自定义窗口的装饰

      这只是Qt 5.15中一个新功能的快速更新,我对此感到非常兴奋。传统上,窗口装饰一直是一件很无聊的事情。标题栏,边框,最小化,最大化,调整大小和退出,差不多...

    Qt君
  • Linux内存(手动释放cache)

    项目的扩容申请了一台机器,到手之后看一下机器的指标,看到内存使用情况是这样的。 1、查看内存 free $ free -h total...

    用户1225216
  • 高质量编码-轨迹管理平台(JS代码)

    实时监控列表(Backbone.Collection)和列表中每一项(Backbone.Model)的定义

    MiaoGIS
  • c++三种野指针 野指针的概率即产生原因

    原文链接:https://blog.csdn.net/a2796749/article/details/4689721...

    acoolgiser
  • Linux中的一些常用文件

    这两天做资源自动化交付的项目,写的脚本比较多 ,在写脚本的过程中,遇到了很多Linux中的常用文件,这里列举一下,希望对大家能有所帮助吧。

    AsiaYe

扫码关注云+社区

领取腾讯云代金券