2016-04-06 20 views
1

Aşağıdaki programın çıktısı ne olmalıdır?Statik üye değişken başlatıcıda neden statik üye işlevi (global olan değil) denir?

#include<iostream> 

int foo() 
{ 
    return 10; 
} 

struct foobar 
{ 
    static int x; 
    static int foo() 
    { 
    return 11; 
    } 
}; 

int foobar::x = foo(); 

int main() 
{ 
    std::cout<<foobar::x<<endl; 
} 

Ben programını çalıştırmak ama 11 cevap var, ama doğru cevap 10 olması gerektiğini düşünüyorum var. Ben neden foo() neden statik fonksiyon olmalı bilmiyorum, lütfen bunu anlamama yardımcı olun. Statik fonksiyon kullanımı ile ilgili diğer örnekler tercih edilecektir!

cevap

3

Başlatıcı ifadesi yapı foobar kapsamında olduğundan, foobar::foo() burada çağrılacaktır. standart kaynaktan

, $9.4.2/2 Static data members [class.static.data]:

statik veri üyesi tanımı başlatıcı ifade sınıfındaki (3.3.7) kapsamındaki bir. Örnek:

class process { 
static process* run_chain; 
static process* running; 
}; 
process* process::running = get_main(); 
process* process::run_chain = running; 

sınıf process arasında run_chain küresel kapsamında tanımlandığı statik veri elemanı; process::run_chain notasyonu, run_chain üyesinin process sınıfının bir üyesi olduğunu ve process sınıfının kapsamında olduğunu belirtir. Statik veri elemanı tanımında, başlatıcı ifadesi, process sınıfının running statik veri üyesine başvurur. —end örneği]

+0

Güzel açıklama, teşekkürler! –

İlgili konular