什么是不可引用类型?

问题描述 投票:0回答:2

我知道

void&
是无效的。但是,还有其他不可引用的类型吗?

c++ c++11 types reference
2个回答
8
投票

std::add_rvalue_reference
也不会为带有 cv 限定符或 ref 限定符的函数类型创建引用类型。例如

cout << boolalpha << is_reference_v<add_rvalue_reference_t<void() const>> << endl;   // false
cout << boolalpha << is_reference_v<add_rvalue_reference_t<void() volatile>> << endl;   // false
cout << boolalpha << is_reference_v<add_rvalue_reference_t<void() const volatile>> << endl;   // false
cout << boolalpha << is_reference_v<add_rvalue_reference_t<void() &>> << endl;   // false
cout << boolalpha << is_reference_v<add_rvalue_reference_t<void() &&>> << endl;   // false

直播


0
投票

分析

可引用类型定义如下:

以下类型统称为可引用类型

对于任何可引用类型

T
,都可以创建对其的引用。

我们还需要对象类型的定义(上面的链接):

  • 对象类型是(可能是 cv 限定的)类型,但不是函数类型、引用类型或可能是 cv 限定的类型
    void
    (另请参见
    std::is_object
    );

下表列出了类型分类 (C++23) 中的所有类型,并确定哪一个是对象类型,如果不是,则是什么类型。

类型 对象类型?
基本类型 /
void
空型
基本类型 /
std::nullptr_t
对象类型
基本类型/算术类型 对象类型
复合类型/引用类型 参考类型
复合类型/指针类型 对象类型
复合类型/指向成员类型的指针 对象类型
复合类型/数组类型 对象类型
复合类型/函数类型 功能类型
复合类型/枚举类型 对象类型
化合物类型/类类型 对象类型

答案

从定义和上表可以看出,哪些类型是不可引用的:

  • 可能 cv 合格
    void
    ,
  • 带有
  • cv/ref 限定符的 函数类型(也称为可恶的函数类型,请参阅 P0172r0)。

其余可参考。

© www.soinside.com 2019 - 2024. All rights reserved.