如何使初始值设定项列表对代码更改具有鲁棒性?

问题描述 投票:0回答:1

有这样的代码:

#include <iostream>

struct Range {
    //bool enabled = false;
    //int index = 0;
    int begin = 0;
    int end = 0;
};

int main()
{
    Range r = { 2, 3 };
    std::cout << r.begin << " " << r.end;
}

如果我通过取消注释行之一来更改 Range 结构的内容,程序可以编译,但无法正常工作。如果我将 bool 类型字段添加到 Range 的开头,编译器至少会发出警告。但是如果我在 Range 的开头添加一个 int 类型的字段,那么甚至不会有任何警告。

有没有办法确保当结构体的内容发生变化时,所有初始化它的初始化器列表都变得无效或者至少在编译期间发出警告?或者也许有其他可靠的方法可以在代码中找到该结构的所有初始值设定项列表?

一般来说,我需要一些可靠的方法来查找所有初始化程序并确保结构在更改后正确初始化。

c++ c++11 c++14 c++20
1个回答
0
投票

进行更改时添加构造函数。

如果您对该类型的使用绑定到您的代码库,您甚至可以在审核所有使用后删除构造函数(如果它没有意义)。

这允许您将不将 3 个参数传递给初始值设定项列表的情况设置为错误。所有产生的错误的位置会告诉您需要审核代码的位置。

通常,更改聚合的布局是 API 更改。 API 更改需要对其使用进行审核或重写。

© www.soinside.com 2019 - 2024. All rights reserved.