Меня немного смущают глобальные константы. Насколько я понимаю (начальный уровень), «глобальные» переменные определяются вне блока и имеют область действия программы (источник: 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;
}
компилируется в g++ (GCC, последняя 64-битная версия) без проблем, даже с -Wall.
Выход:
1) x=1.5
2) x=2.5
Это сбивает меня с толку. Тот факт, что первая оценка cout означает, что main распознает «x» как «глобальную» переменную (она не была определена в области видимости main). Если это так, то почему он позволяет мне переопределить «x»?
Затем, если вы раскомментируете третье объявление с комментариями, g++ выдаст ошибку повторного объявления. Это означает, что мое первое объявление не могло быть «глобальным» в том смысле, который я определил: S
редактировать: хорошо, вопрос не имеет ничего общего с глобальными переменными, но с областями действия: например, та же проблема в http://pastebin.com/raw.php?i=V5xni19M
double x
объявляет новый локальныйdouble
, скрывая глобальный. Вы не переопределяете его. - person Simple   schedule 11.10.2013