2

以下代码在我的 vc9 版本上编译:

wstring test2;
if (test2.find(L'c') == wstring.npos)
{
}

但就其本身而言

wstring.npos;

才不是。(wstring::npos;工作正常)在我看来,这是 100% 错误的。起初我认为可能正在构建一个 wstring 并且正在访问 npos 成员 ala wstring().npos,但快速尝试进入该行建议否则。用我自己的一类结果模拟同样的情况

警告 C4832:令牌“。” 在 UDT 'Foo' 之后是非法的

但仍然编译。

只是为了我的理智 - 这种语法不应该工作,对吧?鉴于它确实有效,为什么表达式wstring.npos;会失败?

4

3 回答 3

4

wstring.npos应该不起作用,因为它npos是一个static成员,并且可以使用范围解析运算符 ( ) 使用类名访问它,也可以使用点运算符 ( wstring::npos) 通过类实例wstring str; str.npos;访问它。

于 2013-01-03T22:51:19.403 回答
1

然后是非标准行为,老实说,这是 MSVC 所期望的

我有时感到困惑,为什么在没有检查索赔有效性的情况下就假设 MS 有罪。

wstring.npos 无法编译,VS 2008 和 2010 会标记错误。

为什么它不编译,在以前的帖子中已正确解释。

于 2013-01-04T13:30:47.787 回答
0

因为 npos 是类的静态成员。

于 2013-01-03T22:52:54.647 回答