4
4

1 回答 1

2

这两种行为都是正确的,当然根据 C++03 标准(8.5.3 [dcl.init.ref] 第 5 段):

否则,引用应为非易失性 const 类型(即 cv1 应为 const)。[例子: ...]

  • 如果初始化表达式是右值,T2 是类类型,并且“cv1 T1”与“cv2 T2”引用兼容,则引用以下列方式之一绑定(选择由实现定义):

    — 引用绑定到由右值表示的对象(参见 3.10)或该对象内的子对象。

    — 创建了一个“cv1 T2”[sic] 类型的临时对象,并调用构造函数将整个右值对象复制到临时对象中。引用绑定到临时对象或临时对象中的子对象。

我认为 C++11 的定义仍然允许复制,但措辞并没有明确允许复制。无论如何,VC++ 并不声称完全符合 C++11。

于 2013-10-10T22:33:44.520 回答