Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当前实例化成员和未知专门化成员的名称查找_C++_Language Lawyer - Fatal编程技术网

C++ 当前实例化成员和未知专门化成员的名称查找

C++ 当前实例化成员和未知专门化成员的名称查找,c++,language-lawyer,C++,Language Lawyer,是否有任何措辞指定如何查找未知专门化成员和当前实例化成员的名称?有一个非常非正式的定义: 查找模板定义中使用的名称声明时,通常的查找规则用于非依赖名称。依赖于模板参数的名称的查找将推迟到实际模板参数已知为止 指定依赖名称仅适用于具有类型依赖参数的函数调用中的非限定id,因此严格按照此定义,所有其他名称都将是非依赖的,这对于类似以下内容没有意义: 模板 结构A:B { void f() { this->a+=1;//a here是未知专门化的成员,但不是从属名称 } }; 在这里,查找将不得不推

是否有任何措辞指定如何查找未知专门化成员和当前实例化成员的名称?有一个非常非正式的定义:

查找模板定义中使用的名称声明时,通常的查找规则用于非依赖名称。依赖于模板参数的名称的查找将推迟到实际模板参数已知为止

指定依赖名称仅适用于具有类型依赖参数的函数调用中的非限定id,因此严格按照此定义,所有其他名称都将是非依赖的,这对于类似以下内容没有意义:

模板
结构A:B
{
void f()
{
this->a+=1;//a here是未知专门化的成员,但不是从属名称
}
};
在这里,查找将不得不推迟到专门化被实例化,但是,我没有发现这样的措辞来指定这一点,因为
a
不是依赖名称

我能想到的唯一解释是,依赖于定义的名称不同于“依赖于模板参数的名称”。即使如此,它也没有定义名称依赖于模板参数的含义

对于当前实例化的成员,也没有指定何时查找和绑定它们的措辞。例如:

模板
结构
{
Tα;
void f()
{
++a、 //a是当前实例化的成员,但不是依赖名称
}
};
在这种情况下,查找和绑定不需要推迟到专门化被实例化,因为名称隐藏规则将确保
a
始终引用成员
a
,或者模板定义中声明的另一个更本地的名称。然而,与前一个案例一样,也没有这样的措辞来具体说明在这种情况下会发生什么。当然,
a
的类型取决于模板参数,但实际含义很容易推断,如下所示


这仅仅是标准中的一个缺陷吗?

我想你的问题的前半部分已经解决了。@1201程序管理员:我理解它是如何工作的,我想说的是,在正式进行查找时,实际上没有任何措辞。在达成共识之前,我建议你避免像“这仅仅是标准中的一个缺陷吗?”这样的陈述。可以说这让问题“不那么吸引人”:@L.F.是的,我明白你的意思,但是。。。。这个标准有很多问题,这就是其中之一。你真的确定吗?很多时候,我宣布我在standard/compiler/library/等中发现了一个bug,只是为了发现我只是误读或忽略了一个句子或类似的东西。。。然后觉得自己很傻。我想你的问题的前半部分已经解决了。@1201程序。我理解它的工作原理,我想说的是,在正式查找时,没有任何措辞真正说明。我建议你在达成共识之前,避免说“这只是标准中的一个缺陷吗?”。可以说这让问题“不那么吸引人”:@L.F.是的,我明白你的意思,但是。。。。这个标准有很多问题,这就是其中之一。你真的确定吗?很多时候,我宣布我在standard/compiler/library/等中发现了一个bug,只是为了发现我只是误读或忽略了一个句子或类似的东西。。。然后觉得自己很傻。