Я немного смущен глобальными константами. Мое понимание (начальный уровень) заключается в том, что «глобальные» переменные определяются вне блока и имеют программную область (источник: http://www.learncpp.com/cpp-tutorial/42-global-variables/). Но программа:C++ позволяет переопределить глобальную переменную (const)?
#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;
}
компилирует в г ++ (GCC, последние 64-разрядная версия) без каких-либо проблем, даже с -Wall.
Выход:
1) x=1.5
2) x=2.5
Это сбивает с толку меня. Тот факт, что первая оценка cout означает, что main распознает «x» как «глобальную» переменную (она не была определена в области main). Если это так, почему это позволяет мне переопределить «х»?
Затем, если вы раскомментируете прокомментированную третью декларацию, g ++ вызывает ошибку повторного выделения. Значение, мое первое заявление не может быть «глобальными», в том смысле, я определил: S
редактировать: хорошо, вопрос не имеет ничего общего с глобальными переменными, но области применения: например, та же проблема в http://pastebin.com/raw.php?i=V5xni19M
Вы затеняете глобальную переменную локальным. 'double x' объявляет новый локальный' double', скрывая глобальный. Вы не «переопределяете» его. – Simple
Дополнительная информация: http://stackoverflow.com/questions/4269034/what-is-the-meaning-of-prepended-double-colon-to-class-name –