【发布时间】:2018-06-11 05:20:02
【问题描述】:
我正在读一本书,得到了一些我不太了解的类设计代码。
class Queue {
public:
Queue(size_t capacity) {}
explicit Queue(int capacity) : entries_(capacity) {}
...
private:
vector<int> entries_;
...
};
还有一个类似的,
class LruCache {
public:
LruCache(size_t capacity) {}
explicit LruCache(int capacity) : capacity_(capacity) {}
...
private:
int capacity_;
...
};
我有两个问题,
我们能否仅在
explicit关键字上重载方法,例如const关键字?就我而言,参数类型有点不同,int和size_t。一个更重要的问题是为什么。为什么我们需要一个重载的
explicit构造函数?在 C++ 入门中,我相信它说不建议重载具有相似参数类型的函数。
编辑:
我的第二个问题更多关于上面的代码。为什么它有一个带有int 参数的构造函数,然后是一个带有size_t 参数的explicit 构造函数,而int 和size_t 是非常接近的类型。因此,不必为每个构造函数定义两个构造函数。我相信作者定义两个构造函数是有原因的,但我不知道为什么,这应该是我的第二个问题。不是关于 explicit 关键字做什么的一般问题。对不起。
【问题讨论】:
-
int和size_t是不同的类型。代码不是“显式重载”,而是在size_t和int上重载;如果在不允许的地方选择了显式构造函数,则代码格式错误 -
explicit不是函数签名的一部分,因此函数不能被它重载。 -
这本书有没有讲为什么它有这些构造函数?仅基于发布的内容,这对我来说似乎是一个糟糕的主意。
-
1.不; 2.显式与重载无关,它只是防止给定的ctor被考虑进行自动转换;只影响一个参数的ctors
-
@C.M. - 自 C++11 起影响更大。 stackoverflow.com/questions/39122101/…
标签: c++ oop constructor overloading explicit