假设我有一个简单的结构......为什么访问嵌套类型会影响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: error: no member named 'v' in 'A'
为什么第三个版本失败?我不明白如何添加另一层作用域分辨率会导致更宽泛的作用域分辨率失败。事实上,第二个例子看起来与失败的例子相同,但显然编译器不同意。
这是一个假设/语言问题。我并非试图解决矢量大小的特定问题,而是更明白这种语言的这种古怪。
更新
这里是从下面这似乎进一步我的困惑回答另一个例子......
sizeof(decltype(A::v)::value_type); // legal
如何是在这种背景下A::v::value_type
decltype(A::v)::value_type
不同?
观察的大小很有趣。但我仍然有一个谜,在我的例子中,为什么添加':: value_type'导致'v'在'A'中找不到? – 2013-05-08 03:30:56
@AndrewWhite因为'::'操作符使编译器查找命名空间(实际命名空间或复合类型(结构/类/联合))。在'A'中没有名为'v'的命名空间 – larvyde 2013-05-08 04:17:40