4

谁能从 ISO N3242 §3.2 第 2 点解释这个声明

如果在从潜在评估的表达式中引用时通过重载决策选择了一组候选函数的成员,则该成员是 odr-used 的。[注意:这包括对命名函数的调用(5.2.2)、运算符重载(第 13 条)、用户定义的转换(12.3.2)、用于放置新的分配函数(5.3.4)以及非默认初始化(8.5)。

ISO标准2003:说

如果在从潜在评估的表达式中引用时通过重载决议选择了重载函数,则使用重载函数。[注意:这包括对命名函数的调用(5.2.2)、运算符重载(第 13 条)、用户定义的转换(12.3.2)、用于放置 new 的分配函数(5.3.4)以及非默认初始化(8.5)。

这些陈述的实际区别是什么?

任何人都可以借助示例/程序来解释这一点吗?

4

2 回答 2

6

The terminology "overloaded function" is (slightly) ambiguous between referring to the member or to the set. C++11 clarifies that functions that are never selected from a potentially-evaluated expression are not odr-used.

The term "odr-used" is new with C++11. It essentially means that the given object might be represented in the final, compiled binary file, and that the one-definition rule applies.

于 2011-04-11T06:23:32.393 回答
4

该段落已更改以修复核心问题 #1174。在那里您可以找到显示差异的示例。

于 2011-04-11T06:26:47.340 回答