小编For*_*e95的帖子

用C语言对未命名的临时对象进行括号

请考虑以下代码:

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(实例)不是一个类型.因此,括号强制将上述内容视为表达,而不是前瞻性声明.

c++ declaration

4
推荐指数
1
解决办法
171
查看次数

标签 统计

c++ ×1

declaration ×1