gpt4 book ai didi

c++ - 我可以禁止临时对象作为参数吗?

转载 作者:行者123 更新时间:2023-12-01 13:15:50 25 4
gpt4 key购买 nike

假设我有这个功能:

void foo(Object& o) {
/* only query o, dont alter it*/
}
是否可以仅使用已构造的对象调用此函数,并且如果我使用临时对象调用该函数,Visual Studio 会抛出编译错误?
struct Object {
/*Members*/
}

void foo(Object& o) {
/* only query o, dont alter it*/
}

int main() {
Object o = Object();
foo(o); // allow this
foo(Object()) // but disallow this
}

最佳答案

如果您的参数不是 const ,该函数不接受临时变量。
如果您的参数是 const ,该函数接受临时对象和常规对象。
但如果你想防止这种情况,你可以使用以下

struct Object{};
void foo(const Object& o) {
/*only query o, don't alter it*/
}
void foo(Object&& ) = delete;

int main() {
Object o;
foo(o); // allow this
foo(Object{}); // but disallow this
}
Live

关于c++ - 我可以禁止临时对象作为参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62991480/

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