将参数初始化为构造函数,而不是第一个
Initialize parameter into constructor, other than the first one
我想在以下情况下明确更改structor中的第二个参数。有可能,如果是的话,如何?
struct foo{
int x;
int y;
foo(int a=4, int b=6){
x=a;
y=b;
}
};
int main(){
foo *f = new foo();
cout<<f->x<<" "<<f->y<<endl;
//4 6
foo *g = new foo(3,4);
cout<<g->x<<" "<<g->y<<endl;
//3 4
foo *h = new foo(3);
cout<<h->x<<" "<<h->y<<endl;
//3 6
//Can something like this be
//done in C++, if I want
//to change the value of the
//second variable only
foo *k = new foo(b = 13);
return 0;
}
有可能,如果是,如何?
构造函数不可能。通常,C 不支持命名的关键字参数对函数,即使您有默认值,也无法跳过参数,如果您想在其之后通过非默认值。
,如果使用默认成员启动器:
struct foo{
int x = 4;
int y = 6;
};
int main(){
foo f {.y = 4};
}
您可以通过TAG派遣来实现类似的目标;无需将来的标准:
struct foo{
int x = 4;
int y = 6;
enum Xtag { Xinit };
enum Ytag { Yinit };
foo(int a, int b) : x(a), y(b) {}
foo(Xtag, int a) : x(a) {}
foo(Ytag, int b) : y(b) {}
};
int main(){
foo f(foo::Yinit, 4);
}
使用lambda的解决方案,可以在不修改现有类的情况下使用。以下处理您对foo
的定义:
auto make_foo_x4 = [](int b) {
return foo(4, b);
};
foo f = make_foo_y(4);
不利的一面是我们必须明确重复x
的默认值,因此,如果在类别中更改默认值,这可能会破坏假设。
相关文章:
- 用相同的参数声明两个构造函数的最偶像化的方法是什么?
- 静态类属性,C++中的多个构造函数
- 如何同时创建一个具有两个或多个构造函数初始化的对象
- pair的两个构造函数几乎相同,为什么不生成构建错误?
- 为什么<T> LLVM 中的预期为 Expect&&... 实现两个构造函数<T>?
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- C++,处理多个构造函数重载和冗余代码
- 父类有 26 个构造函数重载.如何在不复制+粘贴 26 个重载的情况下将一个小任务附加到所有构造器?
- 如何在C 中的单个构造函数中调用多个构造函数
- 为什么我的类只适用于两个构造函数 C++
- C++创建多个构造函数
- 需要为派生类指定多少个构造函数
- 两个构造函数(带和不带参数),没有输入 -> 没有参数运行。跳过上述类中的构造函数
- 具有多个构造函数的C 通用工厂
- 类介绍 (c++) 项目希望我们创建两个构造函数,但它们都不需要任何参数 - 我应该在这里做什么?
- C++错误,隐 <function-style-cast> 式要求使用模板化类一次调用多个构造函数的多个转换
- 定义多个构造函数时的默认构造函数行为
- C++:定义多个构造函数时的对象创建/销毁序列
- 除了两个构造函数外,C++库导入也可以工作
- 缺少第一个构造函数参数