C++类型支持之std::decltype

前言

std::decltype主要用于推导输入表达式的类型,注意该推导过程在编译期完成,并不会真正对表达式求值。
推导规则如下:

  • 如果输入为标识符表达式类成员表达式,则推导类型即为标识符或类成员的类型
  • 如果输入为类型为T的其他形式表达式:
    • 如果表达式的值为左值,则推导结果为 T&
    • 如果表达式的值为纯右值,则推导结果为 T
    • 如果表达式的值为将亡值,则推导结果为 T&&
  • 如果输入的变量类型包含在括号内,则认为类型为左值,结果为T&

标识符表达式与类成员表达式

class A
{
   
public:
    char mem = 0;
    void func(char) {
   }
    static void staticFunc(int) {
   }
};

A a;
int x = 0;
const int y = 0;
volatile const int z = 0;
int & xx = x;
int && xxx = 0;

decltype(x) x1;                         // int
decltype(y) y1 = 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
std::unique_ptr是C++标准库中的一个智能指针类,用于管理动态分配的对象的所有权。它提供了独占式拥有(exclusive ownership)语义,意味着一个unique_ptr实例可以独占地拥有所指向的对象,并在其生命周期结束时自动释放该对象。 使用std::unique_ptr的主要优点是它提供了自动的内存管理,无需手动调用delete来释放对象。当unique_ptr超出其作用域或被重新分配时,它会自动删除所拥有的对象。 以下是std::unique_ptr的一些重要特性和用法: 1. 创建std::unique_ptr对象: ``` std::unique_ptr<int> ptr(new int); ``` 在这个例子中,我们创建了一个指向int类型对象的unique_ptr。 2. 转移所有权: ``` std::unique_ptr<int> ptr1(new int); std::unique_ptr<int> ptr2 = std::move(ptr1); ``` 通过std::move函数,我们可以将ptr1的所有权转移到ptr2中。此时,ptr1将不再拥有对象的所有权,ptr2将成为唯一拥有者。 3. 访问所指向的对象: ``` std::unique_ptr<int> ptr(new int(42)); int value = *ptr; ``` 我们可以通过解引用操作符*来访问unique_ptr所指向的对象。 4. 释放所有权: ``` std::unique_ptr<int> ptr(new int); int* rawPtr = ptr.release(); ``` 调用release函数可以释放unique_ptr对对象的所有权,返回一个指向该对象的裸指针。此时,unique_ptr不再拥有对象的所有权。 5. 重置unique_ptr: ``` std::unique_ptr<int> ptr(new int); ptr.reset(new int); ``` 使用reset函数可以将unique_ptr指向一个新的对象。这将导致原来指向的对象被删除,并将unique_ptr重新指向新对象。 6. 自定义删除器: ``` std::unique_ptr<FILE, decltype(&std::fclose)> filePtr(std::fopen("file.txt", "r"), &std::fclose); ``` unique_ptr允许我们提供一个自定义的删除器函数,以便在释放对象时执行其他操作。在上述示例中,我们使用std::fclose函数作为删除器来关闭打开的文件。 总之,std::unique_ptr提供了一种安全、高效的方式来管理动态分配对象的所有权,并避免了手动内存管理所带来的错误和资源泄漏的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值