c++中关于初始化型参列表的一些问题

本文探讨了C++中构造函数成员变量的初始化顺序问题,强调成员变量按定义顺序而非初始化列表顺序初始化的重要性,并通过实例展示了正确的初始化方式。

/*
1.成员是按照他们在类中出现的顺序进行初始化的,而不是按照他们在初始化列表出现的顺序初始化的!
   一个好的习惯是,按照成员定义的顺序进行初始化。
2.数组成员在初始化型参列表中不正确 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;


struct node{
    int i, j;
    int num[12]; 
    //node(int x) : j(x), i(j){}//错误的初始化啊 
    /*
        这里i的值是未定义的因为虽然j在初始化列表里面出现在i前面,但是i先于j定义,所以先初始化i,
        而i由j初始化,此时j尚未初始化,所以导致i的值未定义, 然后才对 j 进行初始化。
    */
    //node(): num[1](1), num[2](3){}//错误的书写 
    node(int x) : i(x), j(i){} 
    void out(){
        cout<<i<<" "<<j<<endl;
    }
}; 

int main(){
    node a(4);
    a.out();
    return 0;
}

### C++ 中动态数组的初始化C++ 中,可以使用 `new` 运算符来分配动态数组并对其进行初始化。以下是几种常见的动态数组初始化方法: #### 使用默认构造函数初始化 当创建一个对象类的动态数组时,可以通过调用来初始化每个元素,默认构造函数会自动被调用。 ```cpp string *psa = new string[10](); // 每个元素调用默认构造函数初始化[^1] ``` 这段代码展示了如何通过调用字符串类的无构造函数来初始化包含十个字符串的对象数组。 #### 基本数据类动态数组初始化 对于基本的数据类(如整数),可以直接利用大括号列表来进行批量赋初值操作或者逐项指定各位置上的数值。 ```cpp #include <iostream> int* arrFirst = new int[3]{1, 2, 3}; // 利用花括号列表进行初始化[^2] // 或者单独为每一个索引设置具体的初始值 double* dArray = new double[4]; for (size_t i = 0; i < 4; ++i){ dArray[i] = static_cast<double>(i); } ``` 这里给出了两种不同的方式去完成相同的目标——即建立长度固定的浮点向量,并赋予特定序列作为其成员变量的基础状态;其中一种采用了循环结构配合转换表达式的手段实现这一点。 #### 多维动态数组初始化 如果需要处理多维度的情况,则可借助指针指向固定大小的一维子集来模拟更高阶别的矩阵布局模式。 ```cpp const size_t m = 3; const size_t n = 4; // 创建m行n列的二维数组 int(*matrix)[n] = new int[m][n]; // 初始化整个二维数组 for(size_t row=0 ;row<m;++row){ for(size_t col=0;col<n;++col){ matrix[row][col]=(row*n)+col+1; } } delete[] matrix; // 记得释放内存资源[^3] ``` 上述片段说明了怎样构建以及填充一个具有三乘四规格尺寸的空间分布形态下的整形方阵实例化过程,同时也强调了适时清理不再使用的堆上所占份额的重要性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值