c++参数 使用笔记

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:前言 – 人工智能教程

目录

函数两个返回值:

1. 按值传递(Pass by Value)

2. 按引用传递(Pass by Reference)

3. 按常量引用传递(Pass by Const Reference)

4. 按指针传递(Pass by Pointer)

5. 按常量指针传递(Pass by Const Pointer)

6. 按右值引用传递(Pass by Rvalue Reference)

总结


函数两个返回值:

QVector

传两个参数,一个引用,一个返回

public:
    ThpRecord getLatestRecord(QVector<int>& ids);
};

ThpRecord faceinit::getLatestRecord(QVector<int>& ids) {
    ThpRecord entity;

    // 创建一个 SQL 查询对象
    QSqlQuery query;
    // 执行查询,假设表名为 "thp_record"
    query.exec("SELECT userId, updated_at FROM thp_record ORDER BY updated_at DESC LIMIT 1");

    if (query.next()) {
        entity.userId = query.value(0).toInt();
        entity.updatedAt = query.value(1).toString();

        // 将查询到的 userId 添加到 ids 向量中
        ids.append(entity.userId);
    } else {
        qDebug() << "No record found or query failed:" << query.lastError().text();
    }

    return entity;
}

调用:

  faceinit fi;
    QVector<int> ids;

    ThpRecord latestRecord = fi.getLatestRecord(ids);

    if (latestRecord.userId != -1) {
        qDebug() << "Latest record - UserID:" << latestRecord.userId
                 << "Updated at:" << latestRecord.updatedAt;
        qDebug() << "IDs vector:" << ids;
    } else {
        qDebug() << "No record found.";
    }

在C++中,函数参数的传递方式和使用方法有多种,每种方式都有其特定的用途和适用场景。以下是对C++函数参数的总结:

1. 按值传递(Pass by Value)

  • 概念:传递参数的值,函数内部操作的是参数的副本。
  • 优点:不影响实际参数,保证了参数的安全性。
  • 缺点:对于大对象(如复杂的类对象),会产生性能开销,因为需要复制对象。
  • 示例
    void foo(int x) {
        x = 5; // 修改的是副本
    }
    

2. 按引用传递(Pass by Reference)

  • 概念:传递参数的引用,函数内部操作的是参数的实际对象。
  • 优点:效率高,因为不需要复制对象,可以修改实际参数。
  • 缺点:可能会导致意外修改实际参数,影响安全性。
  • 示例
    void foo(int &x) {
        x = 5; // 修改的是实际参数
    }
    

3. 按常量引用传递(Pass by Const Reference)

  • 概念:传递参数的常量引用,函数内部不能修改参数。
  • 优点:结合了按值传递和按引用传递的优点,效率高且保证了参数的安全性。
  • 缺点:没有明显缺点,推荐使用。
  • 示例
void foo(const int &x) {
    // x = 5; // 错误,不能修改x
}

4. 按指针传递(Pass by Pointer)

  • 概念:传递参数的指针,函数内部操作的是参数的地址。
  • 优点:可以修改实际参数,适合处理动态内存分配。
  • 缺点:需要处理指针的有效性,可能引发空指针异常。
  • 示例
void foo(int *x) {
    if (x != nullptr) {
        *x = 5; // 修改的是实际参数
    }
}

5. 按常量指针传递(Pass by Const Pointer)

  • 概念:传递参数的常量指针,函数内部不能修改参数。
  • 优点:保证参数的安全性,防止修改实际参数。
  • 缺点:同样需要处理指针的有效性。
  • 示例
  • void foo(const int *x) {
        // *x = 5; // 错误,不能修改x
    }
    

6. 按右值引用传递(Pass by Rvalue Reference)

  • 概念:传递参数的右值引用,用于高效移动资源。
  • 优点:主要用于移动语义和避免不必要的拷贝,提升性能。
  • 缺点:仅适用于右值,较为复杂。
  • 示例
void foo(int &&x) {
    x = 5; // 修改的是实际参数
}

总结

  • 按值传递:适用于简单数据类型或不需要修改的情况。
  • 按引用传递:适用于需要修改参数且不希望产生额外开销的情况。
  • 按常量引用传递:适用于传递大对象且不希望修改参数的情况。
  • 按指针传递:适用于动态内存和可变参数数量的情况。
  • 按常量指针传递:适用于动态内存但不希望修改参数的情况。
  • 按右值引用传递:适用于移动语义和优化性能的情况。
  • 43
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值