模板参数定义的变量名称是非限定的从属名称
the variable's name defined by template parameter is a unqualified dependant name
在这里,我测试以检查由"typename D"定义的var,是否为不合格 从属名称。答案是肯定的。因为如果我写两次它的定义:
template<typename D>
class A {
D d_field;
D d_field;
void func() { d_field = 1000; }
}
int main()
{
return 0;
}
G++ 将报告重新定义错误。 以便它演示在模板定义中选中"d_field"。
如果我给一个类型"double*"来使用此模板。模板实例化发生,func2 中报告错误"int 无法转换为双精度*"。
template<typename D>
class A {
D d_field;
void func() { d_field = 1000; }
}
int main()
{
A<double*> a;
a.func();
return 0;
}
它证明"d_field"将在模板实例化中签入。
此外,我将其更改为以下内容,g++ 可以编译它。它证明了 gcc 在基于 c++ 标准的两阶段查找中工作......如果名称是限定的从属名称,则只会在模板实例化中签入它。
template<typename D>
class A {
D:: d_field;
D:: d_field;
void func() { d_field = 1000; }
}
int main()
{
return 0;
}
总之,使用模板参数在模板中定义一个变量,变量的名称是一个非限定的依赖名称。
对吗?
No. 变量的名称是本地声明的名称,因此它既不是依赖的,也不是非依赖的。 只有编译器必须在模板外部查找的名称才能是依赖的或非依赖的。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 具有定义模板还是非模板的友元函数
- 是非静态数据成员错误的CPPReference定义
- 模板参数定义的变量名称是非限定的从属名称