c++ - 为什么可以在没有类实例的情况下在编译时访问非常量、非静态成员?

标签 c++ templates static compile-time

以下代码在 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/

相关文章:

c++ - 为什么在 C++ 中使用非类型参数?

java - 如何使用静态方法定义嵌套静态类,继承自 Java 中的嵌套接口(interface)?

c++ - 在 Linux 上使用 mingw 时未定义对 `__imp_*` 的引用

c++ - 在类模板中创建指向映射的迭代器

c++ - 外部模板类 std::container of movable objects

Java:简单命令的实现

c++ - 仅 header 实现中的大型静态数组

C++ 和 pin 工具——非常奇怪的 IF 语句双变量问题

c# - 使用 C# 和 EmguCV 提取图像的 RGB 颜色直方图

c++ - 无法理解函数