在同一个类/结构中具有相同签名的相同函数?超载?
Posted
技术标签:
【中文标题】在同一个类/结构中具有相同签名的相同函数?超载?【英文标题】:Same function with same signatures in the same class/struct? Overload? 【发布时间】:2014-04-07 12:39:05 【问题描述】:我在 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_;
;
【问题讨论】:
它们没有相同的参数类型,因为它们之一是const
(这意味着隐式传递的this
指针是const
)。第二个不是。
它们的签名不同,一个是const,另一个不是
@BenjaminBannier 小修正:隐式传递的this
指针是到 const
。当然,这就是你的意思。
@sehe 当然是对的;相关段落是 C++11 中的 §9.3.2/1。
谢谢大家,帮了大忙:)谢谢
【参考方案1】:
函数的签名由名称和参数类型定义。 你有两个同名的函数,但它们没有得到相同的参数!
你可能想知道怎么可能?
因此,每个成员函数都隐含地获取另一个参数:this 是“this”指针。指向调用该方法的对象的指针。
当您在方法末尾添加 const 时,您将“this”参数指定为 const 指向 const 的指针。在另一种方法中(没有 const),“this”的类型只是 const 指针。
因此,您有两个签名不同的方法,完全没有问题。
【讨论】:
【参考方案2】:它们没有相同的签名 - 一个是 const
而另一个不是。常量是成员函数签名的一部分。
【讨论】:
【参考方案3】:签名不同,因为一个有const
限定符。
http://www.cprogramming.com/tutorial/const_correctness.html
【讨论】:
以上是关于在同一个类/结构中具有相同签名的相同函数?超载?的主要内容,如果未能解决你的问题,请参考以下文章
在Java中,是不是可以有两个具有完全相同签名的函数,除了一个是静态的