VS.NET C++ 2010 中智能感知和编译器的区别

Posted

技术标签:

【中文标题】VS.NET C++ 2010 中智能感知和编译器的区别【英文标题】:Difference between intellisense and compiler in VS.NET C++ 2010 【发布时间】:2010-02-03 08:12:10 【问题描述】:

下面是合法的C++代码吗:

class C 

     static public  int x;
;

它在 Visual Studio 2008 C++ 和 Visual Studio 2010 C++ (beta 2) 中编译正常。但是静态成员 x 最终不会公开。

在 Visual Studio 2010 beta 2 中,体验更加陌生。 Intellisense 报告错误“需要一个标识符”,但编译器没有。 Visual Studio 2008 没有给出任何错误。

所以问题是:

这是合法的 C++ 代码吗? 什么意思?

【问题讨论】:

【参考方案1】:

这不是合法的 C++。这是一个合法的 C#,所以这就是 MS IDE 出故障的原因。

正确:

public: static int x;

【讨论】:

但它确实可以编译。如果它不合法,IDE 做了正确的事情,而 C++ 编译器做错了事情(至少在 vs.net 2010 中)。 嗯,这确实令人惊讶。但是,“for each(x in someStlCollection)”甚至在 MSVC++ 8 上也可以编译,这完全是关闭的。它是 c C++CLI 语法,它以某种方式通过扩散进入 C++ 编译器。顺便说一句,C++ 提供了它自己的 foreach 语法,从 C++0x 开始。【参考方案2】:

这不是合法的 C++ 代码。

变量声明中不允许使用“public”。 然而,您看到的是编译器“工作”,因为它也编译为 CLI(.NET 代码),并且它是允许和合法的。

【讨论】:

【参考方案3】:

不,这不是合法的 C++

它可能是合法的 C#(但您需要咨询 C# 人员)。

【讨论】:

以上是关于VS.NET C++ 2010 中智能感知和编译器的区别的主要内容,如果未能解决你的问题,请参考以下文章

编译器警告是不是会导致智能感知停止工作?

vs.net 2005中web.config智能感知丢失时

VS2010 中的 C++ 智能感知

C++ VS Express 2010 智能感知

如何为 C++ 智能感知引擎定义宏?

如何在 app.config 中为自定义部分获取智能感知?