【发布时间】:2013-08-14 17:02:29
【问题描述】:
C++,VS 2012(但同样的事情也发生在之前的 VS 版本中)。
有时,Intellisense 会发现并非真正问题的“问题”,并将其红色波浪线置于完全有效的代码之下。
例子:
class A {
A(const A&);
A& operator=(const A&);
public:
A(const wchar_t*, const wchar_t*, int);
#define AMsg(x) A(x, __FILEW__, __LINE__)
};
...
throw AMsg(L"abc");
AMsg 宏转换为 ctor 调用,节省了键入明显的最后两个参数值,代码按预期工作,但 Intellisense 在 AMsg 下放置一个红色波浪线,表示 A::A(const A&) 不可访问。 A::A(const A&) 是不可访问的,是的,但是 AMsg 调用了不同的 ctor,而 Intellisense 看不到这一点。
有没有办法让 Intellisense 忽略 AMsg?我记得我们可以,例如,编辑存储在文件中的编辑器的关键字列表,也许有一些文件或宏(例如,“不解析这个特定文件的内容”?)有助于控制智能感知?
【问题讨论】:
-
这是一个正确的诊断,需要复制构造函数将异常对象传播到捕获它的代码。编译器可以在某些情况下优化它是一个实现细节。
-
@Hans Passant:你说得对,我举了一个不好的例子。谢谢你。然而,问题仍然存在,因为在其他情况下 Intellisense 会出错。
-
我不相信。 Intellisense 现在有一个优秀的编译器,通常的 SO 建议也适用于这里:除非有相反的证据,否则假设错误是在你这边而不是编译器的
-
现在,我正盯着在不同编译单元中定义两种同名结构类型的代码,其中一个单元中的智能感知从另一个单元中获取类型的定义。我无法在只包含与问题相关的代码的准系统项目中重现这一点,因此必须有一些其他代码干扰,但是(a)我可以看到代码是正确的(引用正确的结构成员),(b ) 编译器可以看到代码是正确的,但是 (c) Intellisense 看不到代码是正确的并且会报错。 (续)
-
Intellisense 抱怨的代码周围的代码可能是错误的,并且编译器只是偶然编译它,但这似乎有点牵强。我同意,尽管 VS 2012 中的 Intellisense 比它在所有以前版本的 VS 中工作得好得多。
标签: c++ visual-studio visual-c++ visual-studio-2012 intellisense