【发布时间】:2015-08-11 17:39:21
【问题描述】:
在以下代码中,this 正在调用 globals.cpp 命名空间中的变量实际全局变量。
globals.h
#ifndef GLOBALS_H_
#define GLOBALS_H_
namespace Constants
{
// forward declarations only
extern const double pi;
extern const double avogadro;
extern const double my_gravity;
}
#endif
globals.cpp
namespace Constants
{
// actual global variables
extern const double pi(3.14159);
extern const double avogadro(6.0221413e23);
extern const double my_gravity(9.2); // m/s^2 -- gravity is light on this planet
}
source.cpp
#include <iostream>
#include <limits>
#include "globals.h"
int main()
{
double value_of_pi = Constants::pi;
std::cout << value_of_pi;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.get();
return 0;
}
我知道extern 用于访问其他翻译单元中的全局变量。我可能对此读得太多了,但是为什么 globals.cpp 命名空间中的变量在它们具有命名空间范围时被认为是全局的?另外,我是否可以假设 Constants::pi 从 globals.h 命名空间中的前向声明中检索标识符 pi?
这个问题是我之前提出的问题的延续here。
【问题讨论】:
标签: c++ namespaces scope global-variables forward-declaration