[英]Why does function overload resolution in C++ consider non-static member functions for static calls?
[英]Why does access to nested types affect member resolution in C++?
假設我有一個簡單的結構......
struct A {
std::vector<uint32_t> v;
};
我想找到矢量元素類型的大小......
sizeof(A::v); // legal
sizeof(decltype(A().v)::value_type); // legal
sizeof(A::v::value_type) // illegal
錯誤信息...
example.cpp:18:44:錯誤:'A'中沒有名為'v'的成員
為什么第三個版本失敗了? 我不明白如何添加另一層范圍解析會導致更廣泛的范圍解析失敗。 事實上,第二個例子似乎等同於失敗的例子,但顯然編譯器不同意。
這是假設/語言問題。 我並不是試圖解決矢量大小的特定問題,而是了解這種語言的奇怪之處。
更新
下面的答案中的另一個例子似乎進一步讓我感到困惑......
sizeof(decltype(A::v)::value_type); // legal
在這種情況下, decltype(A::v)::value_type
與A::v::value_type
有何不同?
我不認為你可以使用:: token從變量中獲取一個typename。 忽略sizeof並忽略A :: v。 以下不起作用:
A a; // A is some type with a public typedef for value_type in its declaration
A::value_type b; // ok
a::value_type c; // error
GCC 4.7.1給了我這個錯誤:
x.cpp:9:1: error: 'a' does not name a type
sizeof使得這一點令人困惑,因為它是一個編譯時構造,它接受類型和變量作為參數。
糾正我,如果我錯了,但最后一個失敗是因為你正在訪問最后一個實例,而在第二個你從decltype()獲得類名。 如果你將第三個包裝在一個decltype中就可以了
sizeof(decltype(A::v)::value_type);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.