根据C++ 03标准,引用不完全类型是否有效?我不知道任何实现的引用是非空指针,所以这样的代码应该可以工作。但是,我想知道不完整类型的引用是否符合标准。对不完整类型的引用
我将不胜感激与C++标准的引用和引用的答案。
根据C++ 03标准,引用不完全类型是否有效?我不知道任何实现的引用是非空指针,所以这样的代码应该可以工作。但是,我想知道不完整类型的引用是否符合标准。对不完整类型的引用
我将不胜感激与C++标准的引用和引用的答案。
据我所知,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)。 ]
似乎在所有其他情况下,包括不完整的类型的引用的声明,该类型可以是不完整的。
§15.1.3说
类型废弃表达的不得不完整的类型或 指针或引用一个不完整的类型,不是void *其他,常量 无效*, volatile void *或const volatile void *。
这似乎暗示你可以有一个不完整类型的引用。
我还不是很擅长解释这个标准,所以你要这样做。
请注意,这份名单中,而非常有用的,是在非规范性的说明,并因此不_specify_什么。这很有帮助。 –