ISO C++ (11)是否允许对私有的非静态类成员变量进行优化?这可能会被检测到:
class X { int x; };
assert (sizeof(X) >= sizeof(int));但我不知道有什么条款要求上面的断言。
为了澄清:(a) C++标准中是否有条款确保上述断言。
(b)有没有人能想到其他方法来检测x的省略?offsetof?
(c)尽管存在(a)和(b)项,但是否允许进行优化?
我有一种感觉,如果类是函数的本地类,那么优化是可能的,但不是这样的(但我希望有明确的引用)。
发布于 2012-11-25 00:44:32
我不认为这是被禁止的,但我认为这是不切实际的。
§9类
7/标准布局类是符合以下条件的类:
<代码>H115要么在最多的派生类中没有非静态数据成员,并且最多有一个具有非静态数据成员的基类,或者没有具有非静态数据成员的基类。并且
8/ 标准布局结构是使用类键struct或类键class定义的标准布局类。
..。因此,class X { int x; };是一个标准布局结构。
§9.2类成员class.mem
16/如果两个标准布局结构(第9条)类型具有相同数量的非静态数据成员,并且相应的非静态数据成员(按声明顺序)具有布局兼容类型(3.9),则它们是布局兼容的。
..。因此,class X { int x; };与struct Y { int y; };布局兼容。
不幸的是,布局兼容性并没有在标准中正式定义。然而,考虑到布局这个词的用法,它的意图似乎是声明两个布局兼容的类型应该具有相同的底层表示。
因此,为了能够在X中删除x,必须证明所有布局兼容的结构(例如Y)都服从相同的优化(以保持布局兼容性)。看起来很..。不太可能..。在任何非平凡的程序中。
https://stackoverflow.com/questions/13541325
复制相似问题