【发布时间】:2020-02-26 04:32:40
【问题描述】:
我正在学习数组,以及当您尝试写入越界时,它可能对您的程序有害。发现这一点后,我试图越界阅读。
我玩弄了一个 char 数组和一个 char 变量。
//this occurs within int main()
char vowels[]{'a', 'e', 'i', 'o', 'u'};
char x = 'x';
std::cout << vowels[5]; //this outputs x
这让我想知道是否所有变量都按照声明的顺序连续存储。
【问题讨论】:
-
C dupe: stackoverflow.com/questions/1677415/… 试图找到 C++ 版本
-
不,不是全部。例如,静态变量可以乱序创建。你正在做的是UB:你根本没有任何保证......任何事情都可能发生。
-
我相信这是一个实现细节,而不是标准规定的。 C++ 不支持使用(或滥用)实现细节,并且完全属于未定义行为的领域。这就是坏事发生的地方。
-
这可能会发生,但 AFAIK,不能保证。
-
en.cppreference.com/w/cpp/language/ub - 您的程序包含未定义的行为,因此没有意义。 任何事情都可能发生(并且是有效的解释)。