假设 C++ 编译器为 CPU 寄存器未进行内存映射的体系结构编译了代码。并且假设同一个编译器为 CPU 寄存器保留了一些指针值。
例如,如果编译器无论出于何种原因(例如优化原因),为变量使用寄存器分配(不是谈论 register 关键字),并且我们打印对该变量的引用的值,编译器将返回其中一个保留的“地址值”。
该编译器会被视为符合标准吗?
从我所能收集到的(我还没有阅读整个事情 -工作草案,编程语言 C++ 标准),我怀疑该标准没有提到 RAM 内存或操作内存之类的东西,它定义了自己的内存模型相反,指针作为地址的表示(可能是错误的)。
现在由于寄存器也是一种内存形式,我可以想象将寄存器视为内存模型一部分的实现可能是合法的。
C++ 标准允许(要求)编译器优化对复制构造函数的调用(在某些情况下)的原因是什么,即使它可能包含可观察到的副作用?
如果我没记错的话,“好像”规则已经允许编译器优化掉不必要的代码,只要生成的程序模拟标准中定义的抽象机器的可观察行为。
制定例外规则的动机是什么?它不会在语言中造成不一致吗?方便(或必要)吗?
c++ design-rationale compiler-optimization copy-elision as-if