std :: string.npos有效性

Lig*_*ica 5 c++ string standards

std::string.npos以往任何时候都有效吗?(与正确相反std::string::npos.)

我在一个正在研究的旧项目中看到了很多,而且它不能用VS2010编译.

它是否属于标准前的日子?

ybu*_*ill 5

曾几何时,当开发C语言时,::语法尚未发明.代码看起来像:

class X {
public:
    void f();
};

void X.f() // a dot! see D&E 2.3
{ 
}
Run Code Online (Sandbox Code Playgroud)

但是,std那些日子里名字空间不存在.因此,我怀疑std::string.npos是纯粹的微软扩展(或一个错误?).它可能受旧语法的启发,可能不是.


Che*_*Alf 3

不,std::string.npos从来都不是有效的,不,这不是标准前时代的东西。

我看到其他答案提到 MSVC 已允许使用该表示法。

然而,MSVC 并不是一个非常合规的编译器。例如,它允许您自由地将临时值绑定到对非const. 另一个例子,对于 Windows GUI 子系统应用程序,您必须使用没有详细记录的开关来使其接受标准main. 自从微软聘请 Herb Sutter(以及其他我现在不记得名字的人)来修复他们可怕的编译器以来,已经有了很大的改进。从相对而言,它确实很棒,但从绝对角度来看,编译器仍然有点缺乏。