Rai*_*dex 5 c++ function visual-studio move-semantics pass-by-rvalue-reference
假设我有这个功能:
void foo(Object& o) {
/* only query o, dont alter it*/
}
Run Code Online (Sandbox Code Playgroud)
是否可以仅使用已构造的对象调用此函数,并且如果我使用临时对象调用该函数,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
}
Run Code Online (Sandbox Code Playgroud)
asm*_*mmo 10
如果您的参数不是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
}
Run Code Online (Sandbox Code Playgroud)