这种声明的GCC文档int(a)

时间:2016-04-21 09:51:51

标签: c++ c++11 gcc

我的程序的想法是创建一个局部变量,并调用构造函数。当变量超出范围时,将调用析构函数。所有工作都在Ctor和Dtor完成。 基本上我想创建一个我并不真正关心的局部变量,并将其自动销毁。

然后我会做这样的事情:

providers[biggestArrayIndex]

之后我会做这样的事情:

typedef Foo DoInCtor

这将创建我实际上并不关心的本地变量。

这与我的工作类似:

DoInCtor()

这在我的机器上输出以下内容,在Ubuntu 14.04上用g ++ 4.8.4编译:

#include <stdio.h>
#include <typeinfo>
#include <iostream>

class Bar
{
public :
  Bar() {printf("BAR, Default Ctor %p\n", this);}

  ~Bar() {printf("BAR, Default Dtor %p\n", this);}
};

class Foo
{
public :
  Bar m_bar;
  Foo() : m_bar(Bar()) {printf("FOO, Default Ctor %p\n", this);}
  Foo(Bar ref_bar) : m_bar(ref_bar) {printf("FOO, Other Ctor %p", this);}
  ~Foo() {printf("FOO, Default Dtor %p\n", this);}
};

Foo foo;

int main()
{
  Bar bar1;
  printf("bar1 address, outside local scope : %p\n", &bar1);
  std::cout << "Type of bar1 : " << typeid(bar1).name() << std::endl;
  // This is some lcoal scope
  {
    Foo(bar1);
    printf("bar1 address, in local scope : %p\n", &bar1);
    std::cout << "Type of bar1 : " << typeid(bar1).name() << std::endl;
  }
  Foo foo1= Foo(bar1);
  printf("foo1 address, in local scope : %p\n", &foo1);
  return 0;
}

困扰我的是,在主要功能范围BAR, Default Ctor 0x6021f1 FOO, Default Ctor 0x6021f1 BAR, Default Ctor 0x7ffe6808cfcd bar1 address, outside local scope : 0x7ffe6808cfcd Type of bar1 : 3Bar BAR, Default Ctor 0x7ffe6808cfcf FOO, Default Ctor 0x7ffe6808cfcf bar1 address, in local scope : 0x7ffe6808cfcf Type of bar1 : 3Foo FOO, Default Dtor 0x7ffe6808cfcf BAR, Default Dtor 0x7ffe6808cfcf FOO, Other Ctor 0x7ffe6808cfceBAR, Default Dtor 0x7ffe6808cfcf foo1 address, in local scope : 0x7ffe6808cfce FOO, Default Dtor 0x7ffe6808cfce BAR, Default Dtor 0x7ffe6808cfce BAR, Default Dtor 0x7ffe6808cfcd FOO, Default Dtor 0x6021f1 BAR, Default Dtor 0x6021f1 中是bar1类型,但在本地范围内,它是Bar类型。 在我看来,这是某种类型的var声明。 我甚至试过跟随gcc:

Foo

并创建了int(a) 类型的变量a

这里的问题是,是否有人可以向我提供某种文档,详细解释这一点。一些海湾合作委员会或其他一些文件。

1 个答案:

答案 0 :(得分:4)

您只需创建一个名为bar1的局部变量,该变量将覆盖main中的变量,其类型为Foo。您不使用第二个构造函数创建临时Foo变量。在这种情况下,允许在括号中使用名称。

可疑行与Foo bar1;

相同