假设我有一个简单的结构......
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