参数不得初始化

Ale*_*der -2 c++ compilation

是否可以向函数参数添加编译器级约束,它们必须尚未初始化,例如,以下情况可以正常:

void f(SomeClass& a) { /* ... */ }

int main() {
    f(new SomeClass());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

虽然以下内容不合适:(因为a已初始化并存储在变量中)

int main() {
    SomeClass a;
    f(a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ker 6

在线之间阅读,是允许的目标

f(g());
Run Code Online (Sandbox Code Playgroud)

在哪里SomeClass g()返回一个类型的对象SomeClass

并且不允许

SomeClass a;
f(a);
Run Code Online (Sandbox Code Playgroud)

如果就是这样,那么你正在看rvalue引用:

void f(SomeClass&& arg);      // argument is rvalue reference
void f(const SomeClass& arg); // argument is lvalue reference

f(g()); // calls f(SomeClass&&)
SomeClass a;
f(a);   // calls f(SomeClass&)
Run Code Online (Sandbox Code Playgroud)

这可以故意打败:

f(std::move(a)); // calls f(SomeClass&&)
Run Code Online (Sandbox Code Playgroud)