任何人都可以解释当前C ++ 0x标准草案的这一段吗?

时间:2011-04-11 05:50:11

标签: c++ c++11 standards one-definition-rule

任何人都可以从ISON3242§3.2,第二点

解释这一说法
  

一组候选函数的成员如果被选中则使用odr-used   从可能被评估的表达式引用时的重载决策。   [注意:这包括对命名函数(5.2.2)的调用,运算符重载   (第13条),用户定义的转换(12.3.2),分配函数   placement new(5.3.4),以及非默认初始化(8.5)。

ISO标准2003:说

  

如果通过重载分辨率选择了重载函数,则使用重载函数   从潜在评估的表达中提到。 [注意:这包括电话   命名函数(5.2.2),运算符重载(第13节),用户定义   转换(12.3.2),放置新的分配函数(5.3.4),   以及非默认初始化(8.5)。

这些陈述的实际差异是什么?

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

2 个答案:

答案 0 :(得分:7)

术语“重载函数”在引用成员或集合之间(略微)不明确。 C ++ 11阐明了从未从可能被评估的表达式中选择的函数不会被使用。

术语“odr-used”是C ++ 11的新功能。它实质上意味着给定的对象可能在最终的编译二进制文件中表示,并且one-definition rule适用。

答案 1 :(得分:4)

该段落已更改为修复Core Issue #1174。在那里你可以找到显示差异的例子。