Tag: 一个定义规则

“ODR使用”是什么意思?

这只是在另一个问题的背景下出现的。 显然,类模板中的成员函数只有在使用ODR的情况下才会被实例化。 有人可以解释这到底是什么意思。 维基百科关于ODR的文章没有提到“ ODR使用 ”。 但标准将其定义为 名称出现在潜在评估expression式中的variables是odr-use,除非它是满足出现在常量expression式(5.19)中的要求并立即应用左值到右值转换(4.1)的对象。 在[basic.def.odr]中。 编辑:显然这是错误的部分,整个段落包含不同的东西的多个定义。 这可能与类模板成员函数有关: 如果从可能评估的expression式引用的过程被重载parsingselect,则其名称显示为可能评估的expression式或者候选函数集合中的成员的非重载函数是odr-used,除非它是纯虚拟函数和它的名字没有明确的限定。 但是我不明白,这个规则是如何在多个编译单元中工作的? 如果我明确实例化一个类模板,是否所有的成员函数实例化?

什么时候应该为函数/方法编写关键字“inline”?

什么时候应该在C ++中为函数/方法inline编写关键字? 看到一些答案后,有一些相关的问题: 什么时候我不应该在C ++中为函数/方法编写关键字'inline'? 编译器什么时候不知道何时做一个函数/方法“内联”? 当为函数/方法写入“内联”时,如果应用程序是multithreading的 ,这是否重要?