C++ 同一类/结构中具有相同签名的相同函数?超载?

C++ 同一类/结构中具有相同签名的相同函数?超载?,c++,function,class,boost,member,C++,Function,Class,Boost,Member,我在boost示例中看到了用于构造状态机的代码部分。让我困惑的是两个成员函数ElapsedTime()?这是否允许两个函数具有相同的签名,如函数名和参数类型 我在谷歌上搜索了很多,但没有找到相关信息。如果您对此有任何建议,我们将不胜感激 struct Active : sc::simple_state< Active, StopWatch, Stopped > { public: typedef sc::transition< EvReset, Active >

我在boost示例中看到了用于构造状态机的代码部分。让我困惑的是两个成员函数ElapsedTime()?这是否允许两个函数具有相同的签名,如函数名和参数类型

我在谷歌上搜索了很多,但没有找到相关信息。如果您对此有任何建议,我们将不胜感激

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_;
};
struct-Active:sc::simple_-state
{
公众:
typedef sc::转换反应;
Active():elapsedTime_uu0.0{}
double ElapsedTime()常量{return ElapsedTime}
double&ElapsedTime(){返回ElapsedTime;}
私人:
双延时;
};

它们没有相同的签名-一个是
常量,另一个不是。Constness是成员函数签名的一部分。

签名不同,因为签名具有
const
限定符。
函数的签名由名称和参数类型定义。 您有两个同名函数,但它们的参数不同

你可能想知道这怎么可能

因此,每个成员函数隐式获取另一个参数:这是“this”指针。指向调用该方法的对象的指针

在方法末尾添加const时,将“this”参数指定为指向const的const指针。在另一种方法中(不带常量),“this”的类型只是常量指针


因此,您有两个具有不同签名的方法,根本没有问题。

它们的参数类型不同,因为其中一个是
const
(这意味着隐式传递的
指针是
const
)。第二个不是。它们没有相同的签名,一个是const,另一个不是t@BenjaminBannier次要更正:隐式传递的
指针指向
常量
。当然,这就是你的意思。@sehe当然是对的;相关段落是C++11中的§9.3.2/1。谢谢大家,它帮助很大:)谢谢