使用反射在构造函数中初始化(列表)属性
我试图使用反射来初始化类(列表)中的所有属性: public class EntitiesContainer { public IEnumerable Addresses { get; set; } public IEnumerable People { get; set; } public IEnumerable Contracts { get; set; } public EntitiesContainer() { var propertyInfo = this.GetType().GetProperties(); foreach (var property in propertyInfo) { property.SetValue(property, Activator.CreateInstance(proper
0 2024-04-22
编程技术问答社区
是否有办法得到关于行为不端的指定初始化器的警告?
c99介绍了针对结构的指定Intializer的概念.例如,给定: typedef struct { int c; char a; float b; } X; 我可以像:X foo = {.a = '\1', .b = 2.0F, .c = 4};和调用:printf("c = %d\na = %hhu\nb = %f", foo.c, foo.a, foo.b);输出: c = 4 a = 1 b = 2.000000 如果我有这样的功能,这将成为一个真正的问题: int i = 0; int f() { return ++i; } int g() { i += 2; return i; } int h() { i += 4; return i; } 我想这样初始化:X foo = {.a = (char)f(), .b = g(), .c = h()};现在我做:printf("
10 2024-04-07
编程技术问答社区
C ++矢量初始化列表与分配
在C ++中,遵循两种初始化向量的方法有什么技术差异? vector v_1 {0, 1, 2}; vector v_2 = {3, 4, 5}; 第一个是初始化列表.第二个是什么? 我感谢有关正确术语的提示,并参考文档和不同的标准版本(C ++ 98对C ++ 11). 解决方案 vector v_1 {0, 1, 2}; 这是 direct-list-initialization ,一种 direct-initialization . 用提供的值构建对象v_1 vector v_2 = {3, 4, 5}; 这是 copy-list-initialization .在这种情况下,与 direct-list-initialization没有区别. 但是,仍然存在一个小小的语义差异,如 copy-initialization 不包括显式构造函数. 在C ++ 1
12 2023-11-17
编程技术问答社区
Valgrind错误:退出时正在使用:72,704字节 C++初始化列表与char*的怪异现象
问题: 我有一个我没想到的奇怪问题.我有一个叫答案的课 在标题内是: class Answer { char* aText; bool b_correct; public: Answer():aText(0){;} //default constructor } 主要(测试)驱动程序代码是: int main(void) { static const unsigned int MAX_ANSWERS = 5; Answer answers[MAX_ANSWERS]; } 我得到的(意外的)怪异是发生了一个同种发生,而且我的代码中尚未使用新的地方.我猜char*在初始化列表中调用了这个. 我正在使用Valgrind测试我的代码,并且我获得了11个Allocs和10张自由.当我删除:aText(0)的初始化器时,额外的同anoc消失了. 我知道这是不良构造的代码.我正在遵循一个课程大纲,以学习如何在C ++中
20 2023-11-12
编程技术问答社区
成员初始化器列表:从一个返回元组的函数中初始化两个成员
可以在功能获得的元组中在成员初始化列表中初始化多个成员吗? 随着通过元组返回多个值越来越流行,我希望对此有一个解决方案.除了语言限制之外,我没有其他理由为什么这是不可能的. 这是我拥有的MCVE: auto new_foo(std::size_t size) -> std::tuple, int*> { auto buffer = std::make_unique(size * sizeof(int) + 8); auto begin = static_cast(static_cast(buffer.get() + 4)); return std::make_tuple(std::move(buffer), begin); } struct X { std::unique_ptr buffer_{nullptr}; int*
14 2023-10-27
编程技术问答社区
在C++中,我怎样才能从子C-tor中初始化超类参数?
观看以下示例: class A { public: A(int param1, int param2, int param3) { // ... } }; class B : public A { public: B() : m_param1(1), m_param(2), m_param(3), A(m_param1, m_param2, m_param3) { // ... } }; B b; 显然,当将创建" b"时,将在初始化B的参数之前调用A的ctor. 此规则使我无法创建"包装器"类,从而简化了类的初始化. 这样做的"正确方法"是什么? 谢谢 amir ps:在我的特殊情况下,参数不是原始人,这个示例只是帮助我解释自己. 解决方案 "参数不是原始人".所以你有这样的东西? class Param { /*...*/ }; class A { public:
12 2023-10-05
编程技术问答社区
用成员初始化器列表初始化类对象的引用变量?
https://stackoverflow.com/a/85523361/11862989 从这个问题中,这个问题来自图片.我感觉很小 这个答案是错误的,所以我在那里发表了评论,但是他没有得到他的答复(盖伊(190k名声)谁是我提到的答案),所以我在这里问这一小部分. 1. .h struct A { private: int &i; public: A(int); }; .cpp A::A(int k1): i(k1) { std::cout
18 2023-08-03
编程技术问答社区
将'this'对象传递给一个初始化列表
我将问题降低到以下示例代码: class Charizard { //truck trainer &myTrainer; public: Charizard(trainer &tMyTrainer); }; class trainer { Charizard myPokemon; public: trainer(); }; Charizard::Charizard(trainer &tMyTrainer) : myTrainer(tMyTrainer) {} 而无需更改或添加公共成员,我如何为培训师创建构造函数,以便在初始化列表中创建mypokemon时," myTrainer"指向了创建的培训师? 这是我尝试的: trainer::trainer() : myPokemon(this) {} 当然,"这个"不是正确的类型.我无法更改Charizard构造函数(它是公共成员),所以我不确定该怎么做.有什么想法吗?
12 2023-08-03
编程技术问答社区
自动初始化实例变量?
我有一个看起来像这样的python课程: class Process: def __init__(self, PID, PPID, cmd, FDs, reachable, user): 接下来是: self.PID=PID self.PPID=PPID self.cmd=cmd ... 有什么方法可以自动化这些实例变量,例如C ++的初始化列表?它将省去很多冗余代码. 解决方案 您可以使用装饰器: from functools import wraps import inspect def initializer(func): """ Automatically assigns the parameters. >>> class process: ... @initializer ... def __init__(self
14 2023-06-21
编程技术问答社区
C++:将一个成员指针初始化为空?
我有一个看起来像: 的课程 class Foo { public: Foo(); virtual ~Foo(); private: Odp* bar; }; 我希望将bar初始化为NULL.这是最好的方法吗? Foo::Foo() : bar(NULL) { } 另外,是否有必要虚拟灾难? (如果那是真的,那么构造函数也必须虚拟吗?) 解决方案 我希望将bar初始化为NULL.这是最好的方法吗? 这是正确的方式.所以,是的. 另外,是否有必要虚拟驱动器? 否.如果您将从Foo类继承并且将使用Foo指针删除这些派生的类(尽管作为一般的经验法则,那么如果有其他任何其他情况,则只有在Foo类中删除Foo>虚拟成员). (如果那是真的,那么构造函数也必须虚拟吗?) 否.构造函数都不需要为virtual,也不需要 can 他们. 其他解决方案 是的,初始化列表是最好的. 也许.如果您打算在班级中
32 2023-05-09
编程技术问答社区
C++类初始化列表示例
我正在新的Stroustrup书中第17章,我通过初始化初始化列表的班级来混淆. 示例: in .hpp: class A { public: A() : _plantName(std::string s), _growTimeMinutes(int 1); virtual ~A(); private: std::string _plantName; int _growTimeMinutes; }; in .cpp: A::A() : _plantName(std::string s), _growTimeMinutes(int i) { } 还是在.cpp中: A::A(std::string s, int i) : _plantName(std::string s), _growTimeMinutes(int i) { } 并称之为: A a {"Ca
20 2023-05-03
编程技术问答社区
如何从基类初始化列表中向派生初始化列表添加变量?
我有一个带有参数化构造函数的基类Showticket: //constructor ShowTicket(const char* Row, const char* SeatNumber): sold_status{false}, row(Row), seat_number(SeatNumber) {} 我正在创建一个派生的班级,即SportTicket,它将采用与ShowTicket相同的参数,但会增加新的布尔值,以跟踪Beer_sold.问题是我不知道如何告诉C ++我仍然希望Sold_status在SportTicket构造函数中进行false. 我尝试这样做: //Constructor SportTicket(const char* Row, const char* SeatNumber): ShowTicket(Row, SeatNumber),
28 2023-04-14
编程技术问答社区
构造函数初始化列表中的循环依赖性
以下定义明确吗? class A; class B; // define A, which takes B& in constructor // define B, which takes A& in constructor class C { A a; B b; public: C() : a(b), b(a) { /* stuff with a and b */ } } indeone.com . 的完整示例 只要A和B的构造函数对他们获得的参考都不做任何事情,它是否安全/定义明确? 解决方案 n4140 [class.cdtor]/1读: 对于具有非平凡构造函数的对象,指对象的任何非静态成员或基类 在构造函数开始执行之前,导致不确定的行为.对于一个非平凡的对象 驱动器,指击质器完成后的任何非静态成员或基类 执行导致不确定的行为. 虽然此段落本身并不意味着该行为是其他定义明确的,但以下示例表明它是.这是一个摘录: s
14 2023-03-30
编程技术问答社区
钻石继承图中的 "中间类 "使用非默认的虚拟基础构造函数:为什么不出现编译错误?
考虑钻石继承图(即虚拟基类).我们从上一 问题 在构造上,最派生的类直接调用(虚拟)基础的默认(0-arg)构造函数. 但我们也从上一个问题的答案中知道(例如,在这里 如果钻石中的"中间"类具有由最衍生的类和那些构造函数使用的构造函数,则"调用"其(虚拟)基类的非默认构造函数(通过初始化列表),那就是 未受到尊重……尽管执行了"中间"类的构造函数 . 为什么?我本来会认为这应该是一个编译错误. (当然,当声明最衍生的类并创建钻石时,检测到.) 我正在寻找两件事: 在标准中指定的位置? 这种明确的签名代码是否在其他任何地方发生? 代码示例我所说的内容遵循其实际和预期的输出: B 0arg-ctor Mf 0arg-ctor Mt 0arg-ctor useD 预期输出: ERROR: (line 19) struct `D` creates a diamond inheritance graph where an explicitly
10 2023-03-30
编程技术问答社区
如何在构造函数初始化列表中进行深度复制。
这是列表类中节点的构造函数.我需要将酿酒厂的深层复制,这是初始化列表中的其他类.项目是酿酒厂的一个实例. List::Node::Node(const Winery& winery) : item(winery) // your initialization list here { Winery w = winery; item = w; } 酿酒厂的构造函数: Winery::Winery(const char * const name, const char * const location, const int acres, const int rating) : name(name), location(location), acres(acres), rating(rating) { char *nm = new char[strlen(name) + 1];
20 2023-03-30
编程技术问答社区
用双大括号初始化向量<string>。
有人可以在下面的示例中解释用双卷和单个卷发括号初始化的行为差异吗? 代码#1: vector v = {"a", "b"}; string c(v[0] + v[1]); cout v = {{"a", "b"}}; string c(v[0] + v[1]); cout v = {"a", "b"};您通过提供两个元素的初始化列表来初始化矢量.两个std::string
20 2023-03-30
编程技术问答社区
C++构造器初始化列表的奇怪之处
我一直是一个好男孩,在写我的课程时,将所有成员变量与m _: 前缀 class Test { int m_int1; int m_int2; public: Test(int int1, int int2) : m_int1(int1), m_int2(int2) {} }; int main() { Test t(10, 20); // Just an example } 但是,最近我忘了这样做并最终写作: class Test { int int1; int int2; public: // Very questionable, but of course I meant to assign ::int1 to this->int1! Test(int int1, int int2) : int1(int1), int2(int2) {} }; 相信与否,编译的代码没有错误/警告,作业进行了正确进行!
26 2023-03-30
编程技术问答社区
C++构造器与初始化列表的速度比较
构造函数和初始化列表之间的执行时间有什么差异吗?(或者仅仅是编码偏好的问题). 我有一组需要经常创建的对象,并想知道是否有使用初始化列表而不是构造函数来获得任何性能. 如果我要创建一百万个级别的A类和B级B级的一百万个实例,那么选择会更好(这些对象代表网络中生成的数据包,因此这些数字). class A { private: int a, b; public: A(int a_var, int b_var):a(a_var), b(b_var) {}; }; class B { private: int a, b; public: B(int a_var, int b_var) { a = a_var; b = b_var; } }; 如果任何构造函数比原始类型的其他构造函数快(如示例中),如果A和B被类型替换? 会更快吗? 类型示例:
54 2023-03-30
编程技术问答社区
为什么Java不像C++那样有初始化器列表?
在C ++中,您可以在构造函数开始运行之前使用初始化列表来初始化类的字段.例如: Foo::Foo(string s, double d, int n) : name(s), weight(d), age(n) { // Empty; already handled! } 我很好奇为什么Java没有类似的功能.根据 Core Java:卷1 : c ++使用此特殊语法来调用字段构造函数.在Java中,没有必要,因为对象没有子对象,只有对其他对象的指针. 这是我的问题: 它们的意思是"因为对象没有子对象?"我不明白什么是子对象(我尝试查找它);它们是指扩展超级类的子类的实例吗? 至于为什么Java没有C ++之类的初始化列表,我认为原因是因为所有字段默认情况下都在Java中初始初始化,也是因为Java使用super keyword来调用super(或C ++ Lingo) - 类构造函数.这是正确的吗? 解决方案 在C ++中,初始化列表是
62 2023-03-30
编程技术问答社区