费欣宇 2022-03-20 14:03 采纳率: 75.9%
浏览 20
已结题

c++中类的数据成员可以直接初始化吗

如题,书上说类定义时不占存储空间,无法直接对数据成员初始化,但试了一下好像可以,是我书太旧了吗??


#include<iostream>
using namespace std;
class Time {
private:
    int hour=0;
    int minute=0;
    int second=1;
public:
    void show_time(void);
};
Time t1;

int main() {
    t1.show_time();
}

void Time::show_time(void) {
    cout << hour << ":" << minute << ":" << second;
}

  • 写回答

1条回答 默认 最新

  • _GX_ 2022-03-20 19:42
    关注

    C++最近几年发展比较快,都已经推出了C+11,C++14,C++17,C++20这些标准,引入很多新的语法、特性及标准库,很多以前C++的书还是基于C++03标准的。

    回到你的问题,从C++11开始C++支持Default Member Initializer,即你可以在类里非静态数据成员声明时同时为其指定默认值,
    如果构造函数的初始化列表里没有该数据成员,那么编译器将用其默认值初始化该数据成员。

    https://en.cppreference.com/w/cpp/language/data_members

    Through a default member initializer, which is a brace or equals initializer included in the member declaration and is used if the member is omitted from the member initializer list of a constructor.
    If a member has a default member initializer and also appears in the member initialization list in a constructor, the default member initializer is ignored for that constructor.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月28日
  • 已采纳回答 3月21日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 KeiI中头文件找不到怎么解决
  • ¥15 QT6将音频采样数据转PCM
  • ¥15 本地安装org.Hs.eg.dby一直这样的图片报错如何解决?
  • ¥15 下面三个文件分别是OFDM波形的数据,我的思路公式和我写的成像算法代码,有没有人能帮我改一改,如何解决?
  • ¥15 Ubuntu打开gazebo模型调不出来,如何解决?
  • ¥100 有chang请一位会arm和dsp的朋友解读一个工程
  • ¥50 求代做一个阿里云百炼的小实验
  • ¥15 查询优化:A表100000行,B表2000 行,内存页大小只有20页,运行时3页,设计两个表等值连接的最简单的算法
  • ¥15 led数码显示控制(标签-流程图)
  • ¥20 为什么在复位后出现错误帧