是否可以向函数参数添加编译器级约束,它们必须尚未初始化,例如,以下情况可以正常:
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)
在线之间阅读,是允许的目标
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)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |