如果在窗体构造函数的初始化列表中使用了VCL控件,编译器会报告警告:
此处使用字段“ControlName”时未初始化
情况确实如此还是编译器在这里犯了错误?
当我将表单的控件传递给在初始化列表中初始化的对象时,乍一看似乎可以工作。
示例(C++ Builder 12 Athens)
创建新的 Windows VCL 应用程序
在主窗体上放置
TEdit
将该类添加到
TForm1
的声明之上:
struct EditValidator { EditValidator(TEdit* edit) {} };
在
TForm1
中声明该成员变量:
EditValidator m_editValidator;
在
TForm1
的初始化列表中初始化m_editValidator
:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner), m_editValidator(Edit1) {}
编译器警告:
[C++ 警告] Unit1.cpp(11, 33):此处使用时字段“Edit1”未初始化
如果您的代码/程序运行正常,您可以忽略此 clang 警告,或通过参数 -Wno-uninitialized 阻止它。
对我来说,我会允许编译器发出这些警告,这更有帮助
32位编译器不应该警告这个,只有64位编译器 - 我说得对吗?
干杯