以下代码在 VS2017 中编译良好:
#include <type_traits>
struct Foo
{
int bar;
};
int main()
{
static_assert(std::is_same_v<decltype(Foo::bar), int>, "Foo::bar isn't an int");
return 0;
}
Foo::bar 的访问是否应该在编译时强制执行它是 Foo 的静态成员?我在尝试将模板类型的特定成员变量强制为静态时偶然发现了这一点。
最佳答案
无法访问 decltype(Foo::bar)
说明符中的成员 Foo::bar
:它只是向编译器询问 的类型Foo
的成员,编译器仅从 bar
的声明中获知的信息。
这类似于 sizeof
表达式:您可以在没有可用的 Foo
实例的情况下执行 sizeof(Foo::bar)
,并且编译器将产生正确的结果。
关于c++ - 为什么可以在没有类实例的情况下在编译时访问非常量、非静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44115694/