C++ 中的构造函数使用 [] 而不是括号创建对象
Constructors in c++ making an object with [] instead of brackets
有什么方法可以实现接受大括号而不是括号的构造函数吗?
前任
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
传递给它,则必须使用括号或大括号。当然,实现一个将值作为参数的适当构造函数。
不,你无法改变它,它是基本语言语法的一部分。
相关文章:
- 用于创建命名构造函数的宏
- 类中的 Arduino 对象构造函数设置垃圾值
- C++为具有引用成员变量的类创建复制构造函数
- 编译错误:临时对象构造函数中缺少参数
- 在c++中为链接列表创建复制构造函数/函数
- 双指针在使用 new 时不调用对象构造函数
- 以支持继承的方式将自身shared_ptr添加到对象构造函数中的向量中
- 在创建对象向量时,不为每个对象唯一调用默认对象构造函数
- GCC __attribute__((constructor)) 在对象构造函数之前调用
- 自定义对象构造函数在循环外部循环
- 我正在考虑为"A"类创建复制构造函数,但我不确定采用哪种方法
- 使用匿名联合为结构创建空构造函数
- 从全局对象构造函数停止监视器计时器
- 创建一个构造函数,即Capabe获取任何数量的参数
- Arduino 上的 Sketch 停止在对象构造函数中执行
- 如何创建一个构造函数,该构造函数吸收char阵列
- 通过在引用线程对象来传递取消引用的“this”指针来在函数对象构造函数中创建线程是好是坏
- 如何在具有指向对象的指针数组的类中创建复制构造函数和析构函数,其中对象本身具有指向整数的指针数组
- 为什么当对象构造函数投入新表达式时,为什么不调用DealLocation函数
- 当使用new创建其构造函数抛出的对象时,是否泄漏构造对象