1

我是 C++ 的新手,从 Java 迁移过来并想知道这一点:

        pos = result.find(remove[i]);  
        if (pos == string::npos)

它是在调用字符串“超类”吗?如果它调用类本身来访问常量“npos”,我很困惑,如果我在函数中声明了几个字符串变量,它怎么知道它是类的哪个实例?

4

2 回答 2

5

npos不绑定到实例,而是绑定到类本身。是static会员。Java中也有static成员。

21.4 类模板basic_string [basic.string]

[...]

namespace std {
template<class charT, class traits = char_traits<charT>,
class Allocator = allocator<charT> >
class basic_string {
  public:
    //...
    static const size_type npos = -1;
    //...
};

std::string是 的一个专业basic_string

于 2012-11-07T09:26:55.660 回答
2

npos是字符串的静态成员。
C++ 中的静态成员为每个程序创建一次,并由同一类的所有实例共享。而且无需实例化类也可以访问。

于 2012-11-07T09:31:18.547 回答