1
我的程序的想法是创建一个局部变量和调用构造函数的方式。当变量超出范围时,析构函数将被调用。所有的工作都是在Ctor和Dtor完成的。 基本上我想创建一个本地变量,我并不真正关心它并自动销毁它。这种类型声明的GCC文档int(a)
然后,我会做这样的事情:
typedef Foo DoInCtor
之后,我会做这样的事情:
DoInCtor()
这将创建一个局部变量,我并不真正关心。
这是类似的东西是什么我工作:
#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;
}
此输出我的机器上,使用g ++ 4.8.4在Ubuntu 14.04上编译如下:
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
类型,但在本地范围内是Foo
类型。 在我看来,这是某种类型的var声明。 我甚至尝试以下的gcc上:
int(a)
和它创建的变量a
这是int
类型。
这里的问题是,如果有人可以提供我一些类型的文件,这里详细解释。一些GCC或其他文件。
为什么C标签? –
这只是标准的C++。您可以在声明中的标识符周围放置括号。这就是你要问的吗? – davmac
是的,如果这是标准的,那就是我所问的。 我只是想知道是否有任何关于它的文档? –