费欣宇 2022-03-20 22:03 采纳率: 84.6%
浏览 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-21 03: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月29日
  • 已采纳回答 3月21日
  • 创建了问题 3月20日

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?