以下代码无法编译,因为实例参数与构造函数参数不匹配。如果删除构造函数,它将编译并运行。我希望能够以任何一种方式使用它-使用字符串或直接成员变量初始化进行构造。(这是我真正想做的最低版本。)我是否需要另一个带有初始化程序列表或类似内容的构造函数?
具体来说,我不想添加具有两个int的另一个构造函数,我想使用删除字符串构造函数时所使用的机制。
#include <iostream>
#include <string>
struct S
{
int m_a;
int m_b;
S(const std::string s):
m_a(99),
m_b(99)
{std::cout << "ctor runs" << std::endl;}
friend std::ostream& operator<<(std::ostream& os, const S& s)
{ os << "S: " << s.m_a << ", " << s.m_b; }
};
int main()
{
S s{1,2};
std::cout << s << std::endl;
}
您想要的是不可能的。您的选择是:
这些选项是互斥的。
我是否需要另一个带有初始化程序列表或类似内容的构造函数?
您可以定义一个接受的构造函数std::initializer_list
。这比定义一个接受两个int的构造函数要糟糕。
我想使用删除字符串构造函数时所使用的机制。
您将可以通过删除字符串构造函数来使用该“机制”。
PS您通常应避免按值传递字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句