C 结构初始化:另一种方法
在 C 中,与 C 不同,不可能使用如下所示的点表示法来初始化结构:
<code class="c++">struct address { int street_no; char *street_name; char *city; char *prov; char *postal_code; }; // Invalid C++ syntax address temp_address = { .city = "Hamilton", .prov = "Ontario" };</code>
这个查询提出了几个问题:
技术和实践原因
从技术上讲,不存在任何潜在的限制阻止C 中结构的点表示法初始化的实现。然而,出于以下几个实际原因,C 标准委员会选择不包含此功能:
可读性的替代方法
要增强可读性,请考虑以下替代方法:
<code class="c++">address temp_address = { 0, // street_no nullptr, // street_name "Hamilton", // city "Ontario", // prov nullptr, // postal_code };</code>
<code class="c++">struct address { address(int sn, char* stn, char* c, char* p, char* pc): street_no(sn), street_name(stn), city(c), prov(p), postal_code(pc) {} int street_no; char *street_name; char *city; char *prov; char *postal_code; }; address temp_address(0, nullptr, "Hamilton", "Ontario", nullptr);</code>
这些替代方案提供显式且可读的初始化,同时遵守 C 的类型安全性和一致性原则。
以上是为什么 C 中的结构不支持点表示法初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!