具有其他构造函数的默认结构构造

蚂蚁

以下代码无法编译,因为实例参数与构造函数参数不匹配。如果删除构造函数,它将编译并运行。我希望能够以任何一种方式使用它-使用字符串或直接成员变量初始化进行构造。(这是我真正想做的最低版本。)我是否需要另一个带有初始化程序列表或类似内容的构造函数?

具体来说,我不想添加具有两个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;
}
埃雷里卡

您想要的是不可能的。您的选择是:

  1. 不要定义构造函数,而不要使用聚合初始化。
  2. 为所需的每组参数定义构造函数,并将其实现为所需的行为。

这些选项是互斥的。

我是否需要另一个带有初始化程序列表或类似内容的构造函数?

您可以定义一个接受的构造函数std::initializer_list这比定义一个接受两个int的构造函数要糟糕。

我想使用删除字符串构造函数时所使用的机制。

您将可以通过删除字符串构造函数来使用该“机制”。


PS您通常应避免按值传递字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我有其他构造函数时,如何定义默认构造函数?

具有默认参数的Unity构造函数

没有其他构造函数时,是否有理由明确地编码默认构造函数?

C ++结构默认构造函数

如何在继承层次结构中调用具有默认参数的构造函数?

在没有默认构造函数的情况下将数据从矢量转换为其他

具有所有类属性的构造函数或具有setter的默认构造函数?

具有默认模板类型的默认构造函数的类型推导

当存在其他构造函数时,如何强制创建默认序列构造函数?

如何实现将类别设置为其他的默认构造函数(使用构造函数链接)

如何在具有其他构造函数参数的类内检索HubContext(SignalR)?

如何测试具有采用其他类对象的构造函数的类?(笑话)

具有构造函数和其他对象的Module.exports

具有默认值的单参数构造函数与默认构造函数相同吗?

在结构内定义没有默认构造函数的类

具有私有构造函数的F#结构声明

C ++中具有构造函数的模板化typedef结构

具有标准布局结构的RVO,无需任何构造函数

具有非平凡构造函数的“不可变”结构

具有位域的结构的 Constexpr 构造函数

具有参考参数的模板结构构造函数

具有默认构造函数的龙目岛

具有多个非默认构造函数的 C# winform

为什么片段具有默认构造函数?

Bean必须具有默认构造函数吗?

具有非默认构造函数的单例类

调用具有意外结果的默认构造函数

具有非默认构造函数的多重继承的内存分配

缺少具有EmbeddedId的实体的默认构造函数