前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:前言 – 人工智能教程
目录
3. 按常量引用传递(Pass by Const Reference)
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; // 修改的是实际参数
}
总结
- 按值传递:适用于简单数据类型或不需要修改的情况。
- 按引用传递:适用于需要修改参数且不希望产生额外开销的情况。
- 按常量引用传递:适用于传递大对象且不希望修改参数的情况。
- 按指针传递:适用于动态内存和可变参数数量的情况。
- 按常量指针传递:适用于动态内存但不希望修改参数的情况。
- 按右值引用传递:适用于移动语义和优化性能的情况。