以下代码编译我的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;
会失败?
答案 0 :(得分:4)
wstring.npos
应该不,因为npos
是static
成员,可以使用带有范围解析运算符的类名访问它{{{ 1}})或通过带有点运算符(wstring::npos
)的类实例。
答案 1 :(得分:1)
那么这是非标准的行为,说实话,是MSVC的预期
我有时感到困惑,为什么假设MS在没有检查索赔有效性的情况下有罪。
wstring.npos无法编译,VS 2008以及2010标记错误。
为什么它不能编译,在之前的帖子中已正确解释。
答案 2 :(得分:0)
因为npos是该类的静态成员。