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

C++ c+中的构造函数+;使用[]而不是括号创建对象,c++,class,constructor,C++,Class,Constructor,有什么方法可以实现一个接受大括号而不是大括号的构造函数吗? 前 顺便说一句,我理解括号的概念,我们不能像这样声明一个方法。 但我只是想知道是否有办法做到这一点 定义数组时要做的是创建类的多个实例 比如你的定义 MyString instance[10]; 定义十个不同的MyString对象。也就是说,构造函数将被调用十次,每个对象调用一次 如果您的目的是创建一个MyString对象,并将值10传递给它,则必须使用括号或大括号。当然,实现一个以值为参数的适当构造函数 不,您无法更改它,它是基础语

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

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

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

比如你的定义

MyString instance[10];
定义十个不同的
MyString
对象。也就是说,构造函数将被调用十次,每个对象调用一次

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


不,您无法更改它,它是基础语言语法的一部分。

否。构造函数只能使用
()
{
调用。您可以通过重载
操作符[]
来创建一个带有一个参数的工厂函数,但这将是对一个功能的滥用,这违背了最佳实践,也违反了用户的期望

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


我想在上面的人回答我问题的那一刻,我就开始考虑重载[]操作符了。谢谢你不让我这么做!制作factory类的静态实例(而不是在实际类中),使其看起来更好。@Arof:Re“上面的家伙”;您通常不知道堆栈溢出将以什么顺序显示答案。今天为您显示的“上方”答案明天可能会为您或其他人显示在下方。@lorro谢谢。建议实现了。@JosephThomson:我的意思是,不是
struct foo_factory{…},我会做
静态常量结构{…}foo_工厂
,在这种情况下,在
main()
中,您只需要
foo f=foo_工厂[42]
MyString instance[10];
struct foo {
    int value = {};
};

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

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