【发布时间】:2020-05-24 15:53:20
【问题描述】:
假设我有一个包含两个 std::string 成员和一个 int 值的类,例如:
class DataGroup final {
public:
explicit DataGroup (const std::vector<int>& groupNr,
const std::string& group1,
const std::string& group2)
: groupNr(groupNr)
, group1(group1)
, group2(group2){};
std::vector<int> groupNrs{};
std::string group1{};
std::string group2{};
};
我能否以某种方式拥有 2 个重载的构造函数,其中一个将初始化 groupNr 和 group1,而其他 ctor 初始化 groupNr 和 group2?在 ctor 调用中未初始化的字符串之一将是空字符串。
【问题讨论】:
-
您能否举例说明如何使用它,即您想如何使用不同的构造函数?
-
当然可以,但是如果你不显式初始化任何成员变量,编译器会为你生成默认初始化。依赖它可能会导致意想不到的结果。
-
@cigien 如果我可以始终使用一个或另一个字符串调用构造函数,那就太好了,即 int a = 2;诠释 b = 3; std::vector
dataGroupList{}; dataGroupList.emplace_back(a, "group1 的东西"); dataGroupList.emplace_back(b, "group2 的东西"); -
但是构造函数的第一个参数需要
vector<int>,而不是int。
标签: c++ constructor-overloading