gpt4 book ai didi

c++ - 如何禁止采用 const 引用的函数中的临时变量?

转载 作者:可可西里 更新时间:2023-11-01 18:29:05 26 4
gpt4 key购买 nike

背景:

假设我有这样的东西:

struct item
{
int x;
item(int y): x(y) {}
}

class item_view
{
const item& it;
public:
item_view(const item& it_) : it(it_) {}

friend std::ostream& operator<<(std::ostream& os, const item_view& view)
{return os;} //actually is more complicated
}

我不能重载的原因 operator<<就是比较人性化,而且view是用来传递数据给SQL的,所以ticks等一些字符必须转义。

问题:

有人可能想做这样的事情:

auto view = item_view(2);
std::cout << view;

这似乎是未定义的行为。

问题:

如何防止构建 item_view来自临时工?

最佳答案

您可以提供一个更适合临时对象的额外重载,然后将其删除。例如:

#include <string>

void foo(const std::string &) {}
void foo(std::string &&) = delete;

int main()
{
std::string world = "World";
foo("Hello"); // Doesn't compile, wants to use foo(std::string &&)
foo(world); // Compiles
}

关于c++ - 如何禁止采用 const 引用的函数中的临时变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47186388/

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