chenhehui 发表于 2022-3-20 12:17:12

c++初始化列表申请空间问题


为啥这里会报内存不足的错误,而且是偶尔会报

人造人 发表于 2022-3-20 12:57:59

本帖最后由 人造人 于 2022-3-20 13:06 编辑

成员初始化的顺序:

成员初始化的顺序和它们在类定义中出现的顺序一致,构造函数初始值列表中的前后位置不会影响实际的初始化顺序。

https://blog.csdn.net/growth_path_/article/details/82717260?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_aa&utm_relevant_index=5


构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序。成员被初始化的次序就是定义成员的次序。第一个被定义的成员先被初始化,依次类推。一般,初始化的顺序无关紧要,然而,如果一个成员是根据其他成员而初始化,则成员的初始化顺序是至关重要的。

https://www.cnblogs.com/beeasy/p/6372782.html?utm_source=itdadao&utm_medium=referral

人造人 发表于 2022-3-20 13:05:42

你的编译器对这种情况一声不吭?
还是说你根本就不看警告?
还有,提问题要发代码

$ cat main.cpp
#include <iostream>

class test_t {
public:
    test_t(int i): p(i + 1), i(i) {}
private:
    int i;
    int p;
};

int main() {
    test_t t(10);
    return 0;
}
$ g++-debug -o main main.cpp
main.cpp: In constructor ‘test_t::test_t(int)’:
main.cpp:8:9: warning: ‘test_t::p’ will be initialized after [-Wreorder]
    8 |   int p;
      |         ^
main.cpp:7:9: warning:   ‘int test_t::i’ [-Wreorder]
    7 |   int i;
      |         ^
main.cpp:5:5: warning:   when initialized here [-Wreorder]
    5 |   test_t(int i): p(i + 1), i(i) {}
      |   ^~~~~~
$
页: [1]
查看完整版本: c++初始化列表申请空间问题