在 C 草案 ISO(N4901/2021) 6.5.4(依賴引數的名稱查找)中,我們有:
當函式呼叫 (7.6.1.3) 中的后綴運算式是非限定 id 時,對非限定 id 中的名稱進行非限定查找 (6.5.3) 未找到任何 (1.1) — 類成員的宣告,或 (1.2) — 包含塊作用域的函式宣告,或 (1.3) — 不是函式或函式模板的宣告
我想不出一個包含非限定名稱的非限定 id示例(兩者不同)。Draft 給出了以下示例,但我無法說出其中的內容:(f)(s)
namespace N {
struct S { };
void f(S);
}
void g() {
N::S s;
f(s); // OK: calls N::f
(f)(s); // error: N::f not considered; parentheses prevent argument-dependent lookup
}
uj5u.com熱心網友回復:
包含非限定名稱的非限定 ID
兩者是同義詞。前者是正確的術語。
說不出什么是什么
(f)(s)
通過對在這種情況下后綴表達他們的意思是被呼叫的事情。考慮:
[expr.call]/1函式呼叫是一個后綴運算式,后跟括號,其中包含...
所以,在(f)(s)后綴運算式中是(f)。它顯然不是不合格的 id,因此 ADL 不適用。
uj5u.com熱心網友回復:
我想不出一個包含非限定名稱的非限定 id 示例(兩者不同)。
措辭沒有說“不合格的名字”。并且似乎在“名稱”之前錯過了“組件”這個詞。下面是一個例子:
namespace N
{
struct S { };
template<typename T>
T f(S);
}
void g()
{
N::S s;
f<int>(s); // OK: calls N::f
}
unqualified-id在這里是f<int>(它是 template-id)并且查找是針對它的組件名稱執行的f。
[expr.prim.id.unqual]/2 :
甲組件名的的不合格-ID ù是
- ü如果它是一個名字或
-所述的組件名稱模板id或型別名稱的ù,如果有的話。
[臨時名稱]/2
一個組件名稱簡單模板ID,模板ID,或模板的名稱是在它的第一個名字。
這些段落使用了[basic.pre]/4 中定義的術語“名稱” :
甲名稱是一個識別符號([lex.name]),操作員功能-ID([over.oper]),文字的操作員-ID([over.literal]),或轉換函式-ID([class.conv .fct])。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/341803.html
