我遇到了以下规则(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 对象?