C ++中的:: mean是什么意思?

时间:2010-08-13 20:06:03

标签: c++ methods

void weight_data::rev_seq(string &seq){ 
//TODO
std::reverse(seq.begin(), seq.end());
}

在这个C ++方法中,我认为这个方法不会返回任何内容,因此前缀为void::告诉weight_datarev_seq(string &seq)之间的关系是什么?谢谢!

5 个答案:

答案 0 :(得分:25)

void是返回类型。 ::是范围解析运算符,因此意味着rev_seq位于weight_data的范围内。 weight_data可以是命名空间或类(基于你给出的内容,不可能说出哪个)。

答案 1 :(得分:13)

在C ++中,

  • A::B 表示Bnamespaceclass类型A中的标识符,
  • A.B 表示Bstructclassunion类型的成员,其实例是由对象或引用A引用,和
  • A->B 表示Bstructclassunion类型的成员,其实例是由指针A引用。 (它相当于(*A).B。)

在其他一些语言中,所有三种情况仅由.涵盖。

请注意,在C ++中,不必在类的定义中实现(定义)成员函数。 (如果是,则隐式inline。)它们可以并且通常在单独的实现(.cpp)文件中实现。这样做的好处是,当您更改其中一个类成员函数的实现时,并非所有类的用户都需要重新编译。因此,除非weight_datanamespace名称,否则void weight_data::rev_seq(string &seq) {...}就是其类之外的类成员的定义。

答案 2 :(得分:2)

weight_datanamespace或类名。

答案 3 :(得分:0)

void weight_data::rev_seq(string &seq)告诉编译器这是rev_seq(string &seq)weight_data成员函数的定义。如果这只是说void rev_seq(string &seq) { ... },编译器会认为正在定义非成员函数,而不是rev_seq(string &seq)类的weight_data成员函数。

class weight_data
{
    void rev_str(string &seq);
}

这也可能意味着rev_str指的是属于命名空间weight_data的函数。

namespace weight_data
{
    void rev_str(string &seq);
}

答案 4 :(得分:0)

只想添加两个关于::

的有趣内容

a)Operator ::既是一元运算符又是二元运算符

struct A{
   int m;
};

int x;
int main(){
   ::x;                     // Unary
   int (A::*p) = &A::m;     // Binary
}

b)$ 10.3 / 12 - “范围运算符(5.1)的显式限定禁止虚拟呼叫机制。”

struct A{
   virtual void f(){cout << 1;}
};

struct B : A{
   void f(){cout << 2;}
};

int x;
int main(){
   B b;
   A &ra = b;
   ra.f();     // dynamic binding, prints 2
   ra.A::f();  // suppress VF mechanism, prints 1.
}