簡體   English   中英

為什么對嵌套類型的訪問會影響C ++中的成員解析?

[英]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_typeA::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM