gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:43:26 25 4
gpt4 key购买 nike

我对 Visual Studio 的奇怪行为有点困惑。

class Test
{
private:
int x;
};

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

Syntax error

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

但是在模板函数的情况下,VS 说一切正常,让我访问 x

class Test
{
private:
int x;
};

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

No error with template function

VS shows me private fields

如果我调用这个模板函数,结果将是编译时错误,我明白为什么。但我不明白为什么 VS 不在编辑器窗口中显示错误。有这个功能会起作用的情况吗?或者它只是 VS 编辑器中的一个错误?

最佳答案

模板函数在模板被实例化之前不是函数(它是生成函数的蓝图)。

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

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

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

关于c++ - 为什么 Visual Studio 允许我在模板函数 (C++) 中使用私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58285684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com