小编ozm*_*zmo的帖子

为什么C++支持在结构中成员分配数组,但一般不支持?

我理解不支持成员分配数组,因此以下方法不起作用:

int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // "error: invalid array assignment"
Run Code Online (Sandbox Code Playgroud)

我只是接受了这个事实,认为该语言的目的是提供一个开放式框架,并让用户决定如何实现诸如复制数组之类的东西.

但是,以下工作正常:

struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
Run Code Online (Sandbox Code Playgroud)

该数组num[3]是从其实例中成员分配struct1到其实例中的struct2.

为什么结构支持成员方式的数组,但一般情况下不支持?

编辑:Roger Pate 在结构中的线程std :: string中的注释- 复制/赋值问题?似乎指向答案的大致方向,但我不知道自己确认.

编辑2:许多出色的回应.我之所以选择Luther Blissett,是因为我对这种行为背后的哲学或历史原理很感兴趣,但James McNellis对相关规范文档的引用也很有用.

c c++ arrays struct variable-assignment

82
推荐指数
2
解决办法
7481
查看次数

允许变量未初始化有什么好处?

在许多语言中,您可以声明变量并在初始化之前使用它.

例如,在C++中,您可以编写一个代码段,例如:

int x;
cout << x;
Run Code Online (Sandbox Code Playgroud)

这当然会返回不可预测的(好吧,除非你知道你的程序如何映射出内存)结果,但我的问题是,为什么编译器允许这种行为?

允许使用未初始化的内存会导致某些应用程序或效率吗?

编辑:我想到,将初始化留给用户会最大限度地减少对寿命有限(写周期)的内存介质的写入.只是上述"绩效"标题下的一个具体例子.谢谢.

c++ memory mapping variables initialization

8
推荐指数
3
解决办法
378
查看次数

在C++中,调用delete运算符时会发生什么?

在C++中,我理解delete运算符在与数组一起使用时"销毁"它,释放它使用的内存.但是这样做会发生什么?

我想我的程序只会标记要重新使用的堆的相关部分,并继续.

但我注意到,数组的第一个元素也设置为null,而其他元素保持不变.这有什么用途?

int * nums = new int[3];
nums[0] = 1;
nums[1] = 2;

cout << "nums[0]: " << *nums << endl;
cout << "nums[1]: " << *(nums+1) << endl;

delete [] nums;

cout << "nums[0]: " << *nums << endl;
cout << "nums[1]: " << *(nums+1) << endl;
Run Code Online (Sandbox Code Playgroud)

c++ memory arrays delete-operator

2
推荐指数
1
解决办法
2104
查看次数