我在boost示例中看到了一个用于构造状态机的代码部分。令我困惑的是两个成员函数ElapsedTime()?是否允许这两个函数具有相同的签名,例如函数名和参数类型?
我已经google了很多但没有任何运气可以找到相关信息。对此有任何建议将不胜感激。
struct Active : sc::simple_state< Active, StopWatch, Stopped >
{
public:
typedef sc::transition< EvReset, Active > reactions;
Active() : elapsedTime_( 0.0 ) {}
double ElapsedTime() const { return elapsedTime_; }
double & ElapsedTime() { return elapsedTime_; }
private:
double elapsedTime_;
};
答案 0 :(得分:1)
他们没有相同的签名 - 一个是const
而另一个不是。 Constness是成员函数签名的一部分。
答案 1 :(得分:1)
函数的签名由名称和参数类型定义。 你有两个具有相同名称的函数,但它们没有相同的参数!
你可能想知道它怎么可能?
因此,每个成员函数都隐式得到另一个参数:这是&#34;这个&#34;指针。指向调用该方法的对象的指针。
在方法结尾添加const时,指定&#34; this&#34;参数为 const指向const 的指针。在另一种方法(没有const)中,&#34;这个&#34;只是常量指针。
因此,您有两种具有不同签名的方法,并且根本没有问题。
答案 2 :(得分:0)
签名不同,因为签名有const
个限定词。
http://www.cprogramming.com/tutorial/const_correctness.html