根据 C++ 标准,函数参数的名称由declarator-id解析,并且declarator-id也可以是限定名称。这意味着,以下代码是完全有效的(如果我正确理解了标准中的相关部分):
template<class T>
struct Sample
{
int fun(int T::count); //T::count is qualified variable name
};
我的问题基本上是,为什么有人会写这样的代码?在什么情况下,使用限定名(在函数参数列表中)可能是有利的?
编辑:
看来我对这些部分的理解不正确。除了上面的代码,我们可能可以编写以下代码(根据 C++ 标准):
template<class T>
struct sample
{
void fun(int arr[T::count]);
};
gcc-4.3.4完美编译。但是,我并不完全满意,因为 T::count 不再是参数(我猜)。