struct A {
int a;
.
.
.
int b;
} obj;
const ptrdiff_t diff = &obj->b - &obj->a;
diff
是否总是包含一个常量,即使程序运行多次也不会改变?
diff
总是积极的吗?
有没有办法在编译时获得这种差异? (手动计数除外)
答案 0 :(得分:5)
的行为
const ptrdiff_t diff = &obj->b - &obj->a;
未定义。如果它们指向同一数组中的元素,或者超过该数组末尾的元素,则只能减去两个指针。为此,标量被视为长度为1的数组。
令我感到惊讶的是,这是C ++中一个鲜为人知的规则,C就此而言。
虽然我从来没有碰到过那些没有给你带来明智感的编译器。结果,不这样的代码,因为你没有编写可移植的C ++。随着编译器优化技术变得越来越激进,您可以完全期望基于此的代码在将来中断。