结构引用(。)运算符适用于vc9中的类名

时间:2013-01-03 22:49:08

标签: c++ visual-c++

以下代码编译我的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;会失败?

3 个答案:

答案 0 :(得分:4)

wstring.npos应该,因为nposstatic成员,可以使用带有范围解析运算符的类名访问它{{{ 1}})或通过带有点运算符(wstring::npos)的类实例

答案 1 :(得分:1)

  

那么这是非标准的行为,说实话,是MSVC的预期

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

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

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

答案 2 :(得分:0)

因为npos是该类的静态成员。