2016-04-21 33 views
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或其他文件。

+2

爲什麼C標籤? –

+0

這只是標準的C++。您可以在聲明中的標識符周圍放置括號。這就是你要問的嗎? – davmac

+0

是的,如果這是標準的,那就是我所問的。 我只是想知道是否有任何關於它的文檔? –

回答

4

您只需創建一個局部變量,稱爲bar1,它覆蓋main中的一個變量,並且類型爲Foo。您不會使用第二個構造函數創建一個臨時Foo變量。在這種情況下,允許在括號中標註名稱。

可疑行相同Foo bar1;

相關問題