消除具有静态存储持续时间的变量

用户名

我遇到以下规则(3.7.1 / 2 N3797):

如果具有静态存储持续时间的变量具有初始化或具有副作用的析构函数,则即使它看起来未使用,也不应将其消除,除非可以按照12.8的规定消除类对象或其复制/移动。

的确,如果我们声明一个具有静态存储持续时间的变量,并且其构造函数或析构函数具有副作用,那么即使该变量未被使用,内存也将为其分配内存?

特别是,我正在尝试使用以下代码:

#include <csignal>
#include <iostream>
#include <cstdlib>

using std::cout;

struct data_member
{
    data_member(){ cout << "data_member\n"; }
    ~data_member(){ cout << "~data_member\n"; }
};

struct Y
{
    static data_member m;
    Y(){ cout << "Y\n"; }
    ~Y(){ cout << "~Y\n"; }
};

Y y;


int main()
{
}

爱迪

为什么在示例中未构造data_member对象?

Angew不再为SO感到骄傲

嗯,这就是标准所说的,所以...是的。

与往常一样,有一个as-if规则,只要最终效果是相同的,它允许编译器执行几乎所有操作。我可以想象,如果该类在数据方面是巨大的,但是构造函数和析构函数(以及其他任何人)不访问该数据,则编译器可以按正确的顺序调用该构造函数和析构函数,而不会为未使用的数据留出空间。


就您的示例而言,您在声明 Y::m,但从未定义因此它不存在。如果尝试访问它,则会收到链接器错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MSVC:具有非静态存储持续时间的变量不能用作非类型参数

来自分类Dev

错误 C2971 具有非静态存储持续时间的变量不能用作非类型参数

来自分类Dev

具有自动存储持续时间的变量的地址可以在其定义中使用吗?

来自分类Dev

是否可以将 page_size 存储到具有静态存储持续时间的对象中?

来自分类Dev

使用参数包扩展和附加值初始化具有静态存储持续时间的std :: array

来自分类Dev

嵌套类中的静态成员对封闭类是否具有静态持续时间?

来自分类Dev

静态存储持续时间变量在未命名块/ sope中的用途?

来自分类Dev

具有持续时间的定期事件

来自分类Dev

所有常量都具有静态持续时间吗?

来自分类Dev

外部变量与静态变量的持续时间

来自分类Dev

字符串的静态存储持续时间

来自分类Dev

静态存储持续时间初始化

来自分类Dev

静态存储持续时间警告如何处理?

来自分类Dev

为什么GCC / Clang接受const限定对象作为具有静态存储持续时间的对象的初始化程序?

来自分类Dev

在不同转换单元中对带有静态存储持续时间的相关非局部常量浮点变量进行常量初始化

来自分类Dev

具有用户定义的字符串文字的基础字符数据的存储持续时间

来自分类Dev

从另一个线程访问具有自动存储持续时间的对象

来自分类Dev

具有自动存储持续时间的“太大”对象是不确定的行为吗?

来自分类Dev

UIView-具有持续时间的动画似乎忽略了持续时间

来自分类Dev

JavaScript 加载具有特定持续时间的图像

来自分类Dev

合并具有不同持续时间的视频和音频

来自分类Dev

FFMPEG:复用具有不同持续时间的流

来自分类Dev

FFMPEG图像序列具有不同的持续时间

来自分类Dev

计算Prometheus指标具有特定值的持续时间?

来自分类Dev

具有动态元素的CSS动画持续时间

来自分类Dev

在JavaScript中更改具有不同持续时间的文本

来自分类Dev

如何获得具有多行的天数的持续时间总和?

来自分类Dev

如何运行具有特定持续时间的函数?

来自分类Dev

在地址比较下,具有自动存储持续时间的两个不同对象是否可以相等?

Related 相关文章

  1. 1

    MSVC:具有非静态存储持续时间的变量不能用作非类型参数

  2. 2

    错误 C2971 具有非静态存储持续时间的变量不能用作非类型参数

  3. 3

    具有自动存储持续时间的变量的地址可以在其定义中使用吗?

  4. 4

    是否可以将 page_size 存储到具有静态存储持续时间的对象中?

  5. 5

    使用参数包扩展和附加值初始化具有静态存储持续时间的std :: array

  6. 6

    嵌套类中的静态成员对封闭类是否具有静态持续时间?

  7. 7

    静态存储持续时间变量在未命名块/ sope中的用途?

  8. 8

    具有持续时间的定期事件

  9. 9

    所有常量都具有静态持续时间吗?

  10. 10

    外部变量与静态变量的持续时间

  11. 11

    字符串的静态存储持续时间

  12. 12

    静态存储持续时间初始化

  13. 13

    静态存储持续时间警告如何处理?

  14. 14

    为什么GCC / Clang接受const限定对象作为具有静态存储持续时间的对象的初始化程序?

  15. 15

    在不同转换单元中对带有静态存储持续时间的相关非局部常量浮点变量进行常量初始化

  16. 16

    具有用户定义的字符串文字的基础字符数据的存储持续时间

  17. 17

    从另一个线程访问具有自动存储持续时间的对象

  18. 18

    具有自动存储持续时间的“太大”对象是不确定的行为吗?

  19. 19

    UIView-具有持续时间的动画似乎忽略了持续时间

  20. 20

    JavaScript 加载具有特定持续时间的图像

  21. 21

    合并具有不同持续时间的视频和音频

  22. 22

    FFMPEG:复用具有不同持续时间的流

  23. 23

    FFMPEG图像序列具有不同的持续时间

  24. 24

    计算Prometheus指标具有特定值的持续时间?

  25. 25

    具有动态元素的CSS动画持续时间

  26. 26

    在JavaScript中更改具有不同持续时间的文本

  27. 27

    如何获得具有多行的天数的持续时间总和?

  28. 28

    如何运行具有特定持续时间的函数?

  29. 29

    在地址比较下,具有自动存储持续时间的两个不同对象是否可以相等?

热门标签

归档