グローバル定数に少し混乱しています。私の(初心者レベルの)理解は、「グローバル」変数はブロックの外側で定義され、プログラムの範囲を持っているということです(ソース:http://www.learncpp.com/cpp-tutorial/42-global-variables/)。しかし、プログラム:
#include <iostream>
const double x=1.5;
int main(){
std::cout << "1) x=" << x << std::endl;
double x=2.5;
std::cout << "2) x=" << x << std::endl;
//const double x=3.5;
return 0;
}
-Wall を使用しても、問題なく g++ (GCC、最新の 64 ビット バージョン) でコンパイルできます。
出力:
1) x=1.5
2) x=2.5
これは私を混乱させます。最初の cout が評価されるという事実は、メインが「x」を「グローバル」変数として認識することを意味します (メインのスコープでは定義されていません)。その場合、なぜ「x」を再定義できるのでしょうか?
次に、コメント化された 3 番目の宣言のコメントを解除すると、g++ は再宣言エラーをスローします。つまり、私の最初の宣言は、私が定義した意味で「グローバル」であってはなりません:S
編集: わかりました、質問はグローバル変数とは関係ありませんが、スコープ: たとえば、 http://pastebin.com/raw.php? i=V5xni19Mの同じ問題