2011-09-09 54 views
1

根据C++ 03标准,引用不完全类型是否有效?我不知道任何实现的引用是非空指针,所以这样的代码应该可以工作。但是,我想知道不完整类型的引用是否符合标准。对不完整类型的引用

我将不胜感激与C++标准的引用和引用的答案。

回答

4

据我所知,C++标准没有明确说明可以引用不完整的类型。但标准确实具有指定当类型必须是完整的截面:

3.2一种定义规则[basic.def.odr]

4.恰好一个的定义如果类的使用方式要求类的类型为 ,则在翻译 单位中需要使用类。 [实施例以下完整的翻译单元是 良好的,即使它从未定义X

struct X;  // declare X as a struct type 
    struct X* x1; // use X in pointer formation 
    X* x2;  // use X in pointer formation 

末端示例] [注:用于声明和表达式的规则 描述哪些上下文完成类的类型是必需的。一类 型T必须是完整的,如果:

  • T类型的对象被定义一个左值到右值转换应用于左值参照 (3.1,5.3.4)或
  • T类型的对象(4.1),或
  • 的表达式被转换(隐式或显式),以 类型T(第4条,5.2.3,5.2.7,5.2.9,5.4),或
  • 一个不是空指针常量的表达式,并且具有类型 以外void *使用的隐式转换(第4),dynamic_cast(5.2.7) 或static_cast(5.2.9)或
  • 类成员转换为类型指针T或参考 到T访问运算符应用于类型为 T(5.2。5),或
  • typeid运算符(5.2.8)或sizeof运算符(5.3.3)是 施加到T类型的操作数,或
  • T类型的返回类型或参数类型的函数被定义 (3.1)或所谓的(5.2.2)或
  • T类型的左值被分配给(5.17)。 ]

似乎在所有其他情况下,包括不完整的类型的引用的声明,该类型可以是不完整的。

+1

请注意,这份名单中,而非常有用的,是在非规范性的说明,并因此不_specify_什么。这很有帮助。 –

4

§15.1.3说

类型废弃表达的不得不完整的类型或 指针或引用一个不完整的类型,不是void *其他,常量 无效*, volatile void *或const volatile void *。

这似乎暗示你可以有一个不完整类型的引用。

我还不是很擅长解释这个标准,所以你要这样做。