首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++优化了私有变量

C++优化了私有变量
EN

Stack Overflow用户
提问于 2012-11-24 20:44:24
回答 1查看 153关注 0票数 2

ISO C++ (11)是否允许对私有的非静态类成员变量进行优化?这可能会被检测到:

代码语言:javascript
复制
class X { int x; };
assert (sizeof(X) >= sizeof(int));

但我不知道有什么条款要求上面的断言。

为了澄清:(a) C++标准中是否有条款确保上述断言。

(b)有没有人能想到其他方法来检测x的省略?offsetof?

(c)尽管存在(a)和(b)项,但是否允许进行优化?

我有一种感觉,如果类是函数的本地类,那么优化是可能的,但不是这样的(但我希望有明确的引用)。

EN

回答 1

Stack Overflow用户

发布于 2012-11-25 00:44:32

我不认为这是被禁止的,但我认为这是不切实际的。

§9类

7/标准布局类是符合以下条件的类:

  • 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
  • 没有虚函数(10.3)和虚拟基类(10.1),
  • 对所有非静态数据成员具有相同的访问控制(第11条),
  • 没有非标准布局基类,

<代码>H115要么在最多的派生类中没有非静态数据成员,并且最多有一个具有非静态数据成员的基类,或者没有具有非静态数据成员的基类。并且

  • 没有与第一个非静态数据成员具有相同类型的基类。107

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)都服从相同的优化(以保持布局兼容性)。看起来很..。不太可能..。在任何非平凡的程序中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13541325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档