次の点に注意してください。
#include <iostream>
#include <string>
#include <cstdlib>
int main(){
static std::string foo = "inside main";
struct Bar{
Bar(){
std::cout << "I can see " << foo << '\n';
}
};
Bar b;
return EXIT_SUCCESS;
}
このプログラムの出力は次のとおりです。「メインの内部が見えます」。
クラスコンストラクターがクラス定義の外を見てfooを見つけることができるのはなぜですか?
fooが静的である場合、クラス定義と同じ関数内でのみ機能し、クラス定義の前にあります。
それが範囲の規則に違反していないことを私に納得させるのを手伝ってください。なぜそれが可能ですか?そのような実装の利点と落とし穴は何ですか?