请考虑以下代码:
struct Foo
{
};
struct Bar
{
explicit Bar(const Foo&)
{
}
};
int main()
{
Foo foo;
Bar bar(foo); // Okay.
Bar(foo); // Will not compile.
(Bar(foo)); // Okay. Unnamed temporary requires parenthesis.
}
Run Code Online (Sandbox Code Playgroud)
为什么需要临时版本的括号?他们解决了什么含糊之处?
我的预感是:我认为编译器看作Bar(foo)是一个函数的声明,但我不确定为什么会出现这种情况,因为foo(实例)不是一个类型.因此,括号强制将上述内容视为表达,而不是前瞻性声明.
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |