如果不使用静态成员,静态成员变量是否在模板类中初始化?

2024-04-28

如果不使用静态成员,静态成员变量是否在模板类中初始化?我用它来注册类型。

template<class T>
class A
{
    static bool d;
};

template<class T> bool A<T>::d = [](){regist<A<T>>(); return true;}();

int main()
{
   A<int> a;
   return 0;
}

我找到一个方法来测试它。它打印 1 而非 2。 regist() 未被调用,静态成员未初始化。我的测试是在VC110编译器上进行的。而且我也测试了一下online http://ideone.com/r9fVCW

#include <iostream>
using namespace std;

int i = 1;

template<class T>
void regist()
{
    ++i;
}

template<class T>
class A
{
    static bool d;
};

template<class T> bool A<T>::d = [](){regist<A<T>>(); return true;}();

int main()
{
    A<int> a;
    cout << i << endl;
    return 0;
}

的相关部分C++ 标准草案 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3485.pdf受到14 模板这是14.7.1 隐式实例化段落2其中说(强调我的):

除非类模板或成员模板的成员已显式实例化或显式特化,否则当在需要成员定义存在的上下文中引用特化时,会隐式实例化该成员的特化;尤其,静态数据成员的初始化(以及任何相关的副作用)不会发生,除非静态数据成员本身的使用方式需要静态数据成员的定义存在。

我们还可以看到段落8其中说:

类模板的隐式实例化不会导致该类的任何静态数据成员被隐式实例化。

但是,如果您添加一个显式实例化对于第二种情况,如下所示,您将看到2结果:

template<> bool A<int>::d = [](){regist<A<int>>(); return true;}();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果不使用静态成员,静态成员变量是否在模板类中初始化? 的相关文章

  • 使用 lambda 表达式注册类型

    我想知道如何在 UnityContainer 中实现这样的功能 container RegisterType
  • 计算 XML 中特定 XML 节点的数量

    请参阅此 XML
  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • C# 存档中的文件列表

    我正在创建一个 FileFinder 类 您可以在其中进行如下搜索 var fileFinder new FileFinder new string C MyFolder1 C MyFolder2 new string
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 如何在 C 中安全地声明 16 位字符串文字?

    我知道已经有一个标准方法 前缀为L wchar t test literal L Test 问题是wchar t不保证是16位 但是对于我的项目 我需要16位wchar t 我还想避免通过的要求 fshort wchar 那么 C 不是 C
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析

随机推荐

  • clrscr() 不工作,getch() 工作。为什么?

    我正在做一个小C请求密钥并执行 switch 语句中的某些代码的程序 include
  • toastr.js 如何在 Aurelia 和 Typescript 中工作?

    我似乎无法让这些一起工作 我正在使用 Aurelia CLI 并以类似的方式成功地对其他库 如 select2 spin moment 和 numeric 进行了操作 但我似乎无法让 toastr 工作 这是我到目前为止所拥有的 首先我跑了
  • 并发.futures问题:为什么只有1个worker?

    我正在尝试使用concurrent futures ProcessPoolExecutor并行化串行任务 串行任务涉及从数字范围中查找给定数字的出现次数 我的代码如下所示 在执行过程中 我从任务管理器 系统监视器 顶部注意到 尽管给定了 m
  • Apple Mach-O 链接器警告“未找到选项目录...”

    我只是想摆脱像这样弹出的警告 ld warning directory not found for option F Users m Desktop FacebookSDK ld warning directory not found fo
  • System.Console 作为带有输入行的日志窗口

    我正在编写一个控制台应用程序 在文本滚动时需要用户在底行输入 这个想法是让文本滚动并在底部留下输入行 我想要文本编辑功能 箭头键 插入 删除等 我也希望能够拥有静态 状态行 不受滚动影响的行 A real world example wou
  • R:使用 dplyr 对列序列按行求和

    本着类似问题的精神here https stackoverflow com questions 28873057 sum across multiple columns with dplyr and here https stackover
  • 将文件拖放到 Microsoft Access 中

    我在 Microsoft Access 中有一个表单 允许用户将附件上传到每条记录 我想通过让用户将文件拖放到附件字段中来使其更加用户友好 执行此操作的最佳方法是什么 我该如何执行此操作 以下是拖放 附加 文件以便与 MS Access 一
  • 删除并添加回元素后,JQuery 单击功能不起作用

    这是我的点击功能 cal table tbody td on click function if this hasClass available alert asd 我遇到的问题是 在切换到下个月或上个月后 我在日历上的点击功能不起作用 例
  • 使用 FosUserBundle 分配角色

    我对 Symfony 真的很陌生 我正在尝试使用 FosUserBundle 向用户注册角色 但我无法管理如何做到这一点 实际上 我还集成了 PUGXMultiUserBundle 以便为两个不同的角色提供两种不同的形式 谁能帮我 提前致谢
  • MATLAB 引擎函数的输入参数

    我正在尝试使用 MATLAB 引擎在 Python 中调用 MATLAB 函数 但遇到一些问题 在设法将 NumPy 数组作为函数的输入处理后 现在 MATLAB 出现一些错误 MatlabExecutionError 未定义输入函数 si
  • 相机表面视图图像看起来被拉伸

    在纵向模式下 图像看起来垂直拉伸 在横向模式下 图像看起来水平拉伸 虽然捕获图像后以适当的尺寸显示 如何解决这个问题 您需要选择与您的显示尺寸相匹配的预览尺寸 我建议更改预览尺寸设置以匹配您的SurfaceView而不是相反 虽然预览数据很
  • SQL Server:多行的 SUM() 包括 where 子句

    我有一张如下所示的表 PropertyID Amount Type EndDate 1 100 RENT null 1 50 WATER null 1 60 ELEC null 1 10 OTHER null 2 70 RENT
  • Cakephp 验证后,所有表单字段都为空,并出现表单错误

    我有问题 我尝试填写表单 然后单击提交按钮 然后它显示表单错误 但所有文本框字段都变为空白 并且可以显示表单错误 我希望它变得与验证之前相同的值 就像我不想在验证后清除 清空值一样 我做了这样的事情 在视图中 div class regfo
  • Spark流吞吐量监控

    有没有办法监控 Spark 集群的输入和输出吞吐量 以确保集群不会被传入数据淹没和溢出 就我而言 我在 AWS EC2 上设置了 Spark 集群 所以我正在考虑使用AWS 云观察来监控网络输入 and 网络输出对于集群中的每个节点 但我的
  • 我无法使用 LWP::UserAgent 连接到任何 HTTPS 站点

    我正在尝试创建一个仅连接到网站的脚本 但是 由于某种原因 它不会连接到使用 HTTPS 的任何内容 我们在这里启用了代理 但是 我相信代理不是问题 因为如果我要连接到网络内部不通过代理建立隧道的 HTTPS 它仍然会失败 如果我要在任何不使
  • 删除多个对象 Amazon s3 PHP SDK

    我在一次删除多个对象时遇到问题 使用这个库 https github com aws aws sdk php laravel https github com aws aws sdk php laravel 我对使用该库的其他任何事情都没有
  • 无法对非静态方法进行静态引用

    使用 Java 构建多语言应用程序 插入字符串值时出现错误R string资源 XML 文件 public static final String TTT String getText R string TTT 这是错误消息 错误 无法从类
  • 绝对定位的最小高度

    我的页面 topLeft 上有一个区域设置了最小高度 在 topLeft 中 我有一个 heroBanners 部分 我希望将其锚定到 topLeft 的底部 使用position absolute 底部 0 起初 这工作正常 但是当 to
  • SQL SERVER 中是否有与 MS Access 的 VAL() 函数等效的函数?

    我在直接在 sql server 中运行代码 Access Query 时遇到问题 其中包含VAL CoLUMN NAME 经过大量谷歌搜索后 我发现了一个CAST COLUMN AS DATATYPE 取代VAL 但是当该列是文本类型并且
  • 如果不使用静态成员,静态成员变量是否在模板类中初始化?

    如果不使用静态成员 静态成员变量是否在模板类中初始化 我用它来注册类型 template