gpt4 book ai didi

c++ - 如何为构造函数采用右值的类声明变量?

转载 作者:可可西里 更新时间:2023-11-01 10:28:40 25 4
gpt4 key购买 nike

C++11 使用 && 运算符引入了右值参数的概念。如何声明构造函数以右值作为参数的类的变量?我需要这样做,因为我想将一个成员变量添加到一个类中,该类允许我在构造函数中分配这个变量,然后在以后使用它。我的直接示例是 mongocxx::database ,其(唯一)构造函数是:

database (database &&) noexcept;

MongoDB C++ documentation 中的示例在单个语句中声明并赋值初始化这样一个变量,效果很好:

mongocxx::instance inst{};
mongocxx::client conn{};

auto db = conn["mydb"];

但这只有在赋值与声明在同一语句中完成时才有效。您如何执行以下等效操作?

mongocxx::instance inst{};
mongocxx::client conn{};
mongocxx::database db;

db = conn["mydb"];


已更新以按照评论中的建议将“分配”更改为“初始化”。

最佳答案

这两个:

struct conn_holder
{
mongocxx::database db = conn["mydb"];
};

或者这个:

struct conn_holder
{
conn_holder(mongocxx::database&& arg) : db(std::move(arg)) { }
mongocxx::database db;
};

int main()
{
conn_holder ch{conn["mydb"]};
}

应该可以。

请记住,conn_holder 无法复制,只能移动,并且只有在您提供要移动到 db 中的默认值时,它才能具有默认构造函数> 成员。


在这种情况下推迟初始化的替代方法是使用 boost::optional存储 db,但是你必须在使用它之前测试该值是否存在。关于将此与数据成员一起使用的一些信息是 here .

关于c++ - 如何为构造函数采用右值的类声明变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30330349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com