c ++中的构造函数使用[]而不是括号

时间:2017-03-19 10:47:17

标签: c++ class constructor

有什么方法可以实现一个接受括号而不是括号的构造函数?

class MyString
{
    char *x;
    int n;
};

int main()
{
    MyString instance[10];
    return 0;
}

顺便说一下,我理解括号的概念,我们不能声明这样的方法。 但我只是想知道是否有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

没有。只能使用(){}调用构造函数。您可以通过重载operator[]创建一个带有一个参数的工厂函数,但这会滥用一种违反最佳做法并会违反用户期望的功能。

这是我的意思(并且不推荐):

struct foo {
    int value = {};
};

struct foo_factory {
    foo operator[](int v) const {
        return foo{v};
    }
};

int main() {
    foo f = foo_factory()[42];
}

答案 1 :(得分:1)

定义数组时,您正在创建的是您创建该类的多个实例。

例如你的定义

MyString instance[10];

定义了十个不同的MyString个对象。即构造函数将被调用十次,每个对象一次。

如果你的目的是创建一个MyString对象,并将值10传递给它,那么你必须使用括号或大括号。当然,实现一个以值为参数的适当构造函数。

并且没有什么可以做的改变它,它是基本语言语法的一部分。