为什么Visual Studio允许我在模板函数(C ++)中使用私有成员?

格列布·斯克里普尼科夫(Gleb Skripnikov)

我对Visual Studio的异常行为感到困惑。

class Test
{
private:
    int x;
};

void func()
{
    Test t;
    t.x; // VS shows error here
}

语法错误

该代码无法编译,因为我正在尝试访问私有成员 x

但是在使用模板功能的情况下,VS表示一切正常,让我可以访问 x

class Test
{
private:
    int x;
};

template <class T>
void func()
{
    Test t;
    t.x; // No error
}

模板功能没有错误

VS给我看了私人领域

如果我调用此模板函数,则结果将是编译时错误,并且我理解原因。但是我不明白为什么VS在编辑器窗口中不显示错误。在某些情况下此功能可以使用?还是仅仅是VS编辑器中的错误?

达鲁尼

在实例化模板之前,模板函数才是函数(这是生成函数的蓝图)。

为了产生错误,VS总是告诉您实际的模板参数是什么。由于您尚未使用任何实例化它,因此无法创建该错误消息(尽管技术原因可能是另一回事)。

一旦开始将模板用于某些用途,您应该会遇到编译错误。

但是,这是特定于Visual Studio的。其他编译器会在此处给出正确的错误,因为Test::x它不是从属名称。这是Visual Studio正在改进的已知薄弱环节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么C ++允许返回对私有成员的引用

来自分类Dev

Typescript-使用类作为接口,为什么我必须实现私有成员/方法?

来自分类常见问题

为什么甚至可以更改私有成员或使用反射在C#中运行私有方法?

来自分类Dev

在get中使用私有成员而不是让类自动设置属性本身有什么好处?

来自分类Dev

使用私有成员的子类构造函数

来自分类Dev

为什么我不能在类定义中直接初始化私有成员变量

来自分类Dev

带有公共 getter 和 setter 的私有成员的目的是什么?C#

来自分类Dev

为什么使用反射访问外部类的私有成员会引发IllegalAccessException?

来自分类Dev

什么时候应该使私有成员成为静态成员,以及在我的情况下该如何覆盖

来自分类Dev

C ++:访问该类的私有成员

来自分类Dev

在C ++中,类仅包含(默认情况下)私有成员有什么用?

来自分类Dev

使用friend函数,我们可以覆盖该类的私有成员吗?

来自分类Dev

在公共成员函数内部访问私有成员变量

来自分类Dev

为什么我可以在decltype()中使用私有默认构造函数?

来自分类Dev

使用私有成员函数调用Win32 QueueUserWorkItem()

来自分类Dev

在类定义和静态数据的使用之外定义私有成员函数

来自分类Dev

C++/QT:使用指向私有成员的常量指针作为只读数据共享

来自分类Dev

模板元代码和私有成员

来自分类Dev

选择创建通用函数或类私有成员函数

来自分类Dev

为什么我可以使用模板函数中的私有方法

来自分类Dev

匿名立即函数的私有成员存储在哪里?

来自分类Dev

在原型函数中访问私有成员

来自分类Dev

javascript函数无法访问对象的私有成员

来自分类Dev

在 JavaScript 构造函数中访问私有成员

来自分类Dev

为什么尽管有私有构造函数,却在MSDN中的类中使用SEALED

来自分类Dev

使用公共成员函数访问私有成员变量时出错:变量“未在此范围内声明”

来自分类Dev

在其成员函数中使用类的私有变量

来自分类Dev

为什么Visual Studio不使用我的类库?

来自分类Dev

为什么我不能在类/静态方法中使用私有的、内部的、文件私有的方法?

Related 相关文章

  1. 1

    为什么C ++允许返回对私有成员的引用

  2. 2

    Typescript-使用类作为接口,为什么我必须实现私有成员/方法?

  3. 3

    为什么甚至可以更改私有成员或使用反射在C#中运行私有方法?

  4. 4

    在get中使用私有成员而不是让类自动设置属性本身有什么好处?

  5. 5

    使用私有成员的子类构造函数

  6. 6

    为什么我不能在类定义中直接初始化私有成员变量

  7. 7

    带有公共 getter 和 setter 的私有成员的目的是什么?C#

  8. 8

    为什么使用反射访问外部类的私有成员会引发IllegalAccessException?

  9. 9

    什么时候应该使私有成员成为静态成员,以及在我的情况下该如何覆盖

  10. 10

    C ++:访问该类的私有成员

  11. 11

    在C ++中,类仅包含(默认情况下)私有成员有什么用?

  12. 12

    使用friend函数,我们可以覆盖该类的私有成员吗?

  13. 13

    在公共成员函数内部访问私有成员变量

  14. 14

    为什么我可以在decltype()中使用私有默认构造函数?

  15. 15

    使用私有成员函数调用Win32 QueueUserWorkItem()

  16. 16

    在类定义和静态数据的使用之外定义私有成员函数

  17. 17

    C++/QT:使用指向私有成员的常量指针作为只读数据共享

  18. 18

    模板元代码和私有成员

  19. 19

    选择创建通用函数或类私有成员函数

  20. 20

    为什么我可以使用模板函数中的私有方法

  21. 21

    匿名立即函数的私有成员存储在哪里?

  22. 22

    在原型函数中访问私有成员

  23. 23

    javascript函数无法访问对象的私有成员

  24. 24

    在 JavaScript 构造函数中访问私有成员

  25. 25

    为什么尽管有私有构造函数,却在MSDN中的类中使用SEALED

  26. 26

    使用公共成员函数访问私有成员变量时出错:变量“未在此范围内声明”

  27. 27

    在其成员函数中使用类的私有变量

  28. 28

    为什么Visual Studio不使用我的类库?

  29. 29

    为什么我不能在类/静态方法中使用私有的、内部的、文件私有的方法?

热门标签

归档