C++ 中的构造函数使用 [] 而不是括号创建对象

Constructors in c++ making an object with [] instead of brackets

本文关键字:创建对象 构造函数 C++      更新时间:2023-10-16

有什么方法可以实现接受大括号而不是括号的构造函数吗?
前任

class MyString
{
    char *x;
    int n;
};
int main()
{
    MyString instance[10];
    return 0;
}

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

No.构造函数只能使用 (){} 调用。您可以通过重载operator[]来创建采用一个参数的工厂函数,但这将是对违反最佳实践并违反用户期望的功能的滥用。

这是我的意思(不推荐(的一个例子:

struct foo {
    int value = {};
};
struct foo_factory {
    foo operator[](int v) const {
        return foo{v};
    }
};
int main() {
    foo f = foo_factory()[42];
}

定义数组时要做的是创建类的多个实例。

例如您的定义

MyString instance[10];

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

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

不,你无法改变它,它是基本语言语法的一部分。