Sas*_*kia 1 c++ static namespaces
我正在使用自己的命名空间实现quickSort alg.
namespace alg
{
static unsigned int comparisons(0);
void quickSort (std::vector<int>& a);
int partition (std::vector<int>& b, int leftIndex);
}
Run Code Online (Sandbox Code Playgroud)
我需要计算数组中元素的比较,因此我使用静态变量comparisons,GETS在函数中递增但在main.cpp它仍然保持为0.
怎么了?为什么在main.cpp中我猜每个.cpp文件都有一个serapate静态变量comparisons,但我不确定.无论如何,我该如何解决这个问题?我是否真的需要编写一个可以保存静态变量的类?或者那仍然无济于事?
请建议在哪里可以找到有关静态变量和命名空间的详细信息?
QuickSort.cpp
void alg::quickSort(std::vector<int>& a)
{
....
comparisons+=1;
}
int alg::partition(std::vector<int>& a, int leftIndex)
{
comparisons+=a.size()-1;
....
}
Run Code Online (Sandbox Code Playgroud)
main.cpp中
alg::quickSort(myvec);
...
std::cout << alg::comparisons << std::endl;
Run Code Online (Sandbox Code Playgroud)
声明的名称空间范围变量static具有内部链接,这意味着每个翻译单元(= .cpp文件)都有自己的副本.因此,在您的情况下可能发生的是文件中的副本实现quicksort并partition递增,但是其中的副本main()不是.
你需要做的是更换static用关键字extern关键字(使该行只是一个声明),然后在一个定义变量.cpp文件(可能是一个实现quicksort和partition):
namespace alg
{
unsigned int comparisons = 0;
}
Run Code Online (Sandbox Code Playgroud)
至于查找更多相关信息,请参阅您最喜欢的好C++书籍.