void weight_data::rev_seq(string &seq){
//TODO
std::reverse(seq.begin(), seq.end());
}
在这个C ++方法中,我认为这个方法不会返回任何内容,因此前缀为void
,::
告诉weight_data
和rev_seq(string &seq)
之间的关系是什么?谢谢!
答案 0 :(得分:25)
void
是返回类型。 ::
是范围解析运算符,因此意味着rev_seq
位于weight_data
的范围内。 weight_data
可以是命名空间或类(基于你给出的内容,不可能说出哪个)。
答案 1 :(得分:13)
在C ++中,
A::B
表示B
是namespace
或class
类型A
中的标识符,A.B
表示B
是struct
,class
或union
类型的成员,其实例是由对象或引用A
引用,和A->B
表示B
是struct
,class
或union
类型的成员,其实例是由指针A
引用。 (它相当于(*A).B
。)在其他一些语言中,所有三种情况仅由.
涵盖。
请注意,在C ++中,不必在类的定义中实现(定义)成员函数。 (如果是,则隐式inline
。)它们可以并且通常在单独的实现(.cpp
)文件中实现。这样做的好处是,当您更改其中一个类成员函数的实现时,并非所有类的用户都需要重新编译。因此,除非weight_data
是namespace
名称,否则void weight_data::rev_seq(string &seq) {...}
就是其类之外的类成员的定义。
答案 2 :(得分:2)
weight_data
是namespace或类名。
答案 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.
}