簡體   English   中英

在靜態成員變量初始化器中為什么要調用靜態成員函數(不是全局函數)?

[英]In static member variable initializer why is static member function (not the global one) called?

以下程序的輸出應該是什么?

#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;
}

我已經運行了該程序,但得到了答案11 ,但我認為正確的答案應該是10 我不知道為什么foo()int foobar::x = foo(); 應該是靜態功能,請幫我理解一下。 關於使用靜態函數的更多示例將是優選的!

因為初始化表達式在struct foobar的范圍內,所以這里將調用foobar::foo()

從標准的$9.4.2/2 Static data members [class.static.data]

靜態數據成員定義中的初始化表達式在其類的范圍內(3.3.7)。 例:

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

process的靜態數據成員run_chain在全局范圍內定義; 符號process::run_chain指定該構件run_chain是類的一個成員process中類的范圍和process 在靜態數據成員定義中,初始化表達式表示runningprocess的靜態數據成員。 - 末端的例子]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM