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;
}

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.