根据我对union
的了解,它就像struct
,主要区别在于union
所有成员共享相同的记忆。虽然每个结构的成员都有自己独特的记忆。
同样启用会员是通过写信给其他人独有的。并且尝试从残疾成员中读取被视为UB。
联合的大小与最大的成员数据类型一样大。好。但我的想法是什么:
如果我有一个数组,请说出我的工会成员的字符,其大小小于工会中最大的成员。因此,当启用此成员(字符数组)时,我可以写入超出其大小的数量吗?但不超过最大会员的规模。在我的情况下(双)。?
#include "stdafx.h"
#include <iostream>
using namespace std;
enum TYPE { PAGE, TITLE, WEIGH };
union UBook {
TYPE tp;
int nPages;
char szTitle[4]; // only 4 bytes
double weight;
};
int main() {
cout << sizeof(UBook) << endl; // 8 bytes (size of double)
UBook book;
book.szTitle[0] = 'W'; // for sure correct
book.szTitle[1] = 'e'; // for sure correct
book.szTitle[2] = 'l'; // for sure correct
book.szTitle[3] = 'c'; // for sure correct
book.szTitle[4] = 'o'; // is this correct?
book.szTitle[5] = 'm'; // is this correct?
book.szTitle[6] = 'e'; // is this correct?
book.szTitle[7] = '\0'; // eigth byte
//book.szTitle[8] = '\0'; // crash
//book.szTitle[9] = '!'; // crash
cout << book.szTitle << endl;
cin.get();
cout << endl << endl << endl;
return 0;
}
上面的程序在许多编译器上工作正常但我很想知道它是否正确。
谢谢。
答案 0 :(得分:4)
viewDidAppear
不,这不正确。这是未定义的行为
topViewController
不,这不正确。这是未定义的行为
book.szTitle[4] = 'o'; // is this correct?
不,这不正确。这是未定义的行为
book.szTitle[5] = 'm'; // is this correct?
仍然未定义的行为
tl; dr 访问其边界之外的数组是未定义的行为。期。否除或除非子句。