要在不破坏代码的情况下正确修复"struct/union中的零大小数组"警告(C4200),可以采取以下措施:
std::array
替换零大小数组。#include<array>
struct MyStruct {
std::array<int, 0> arr;
};
template<typename T, size_t N>
struct ZeroSizeArray {
T data[N];
};
struct MyStruct {
ZeroSizeArray<int, 0> arr;
};
void
作为零大小数组的类型。struct MyStruct {
void* arr;
};
std::vector
来实现动态大小数组。#include<vector>
struct MyStruct {
std::vector<int> arr;
};
std::optional
来实现可选的数组。#include<optional>
struct MyStruct {
std::optional<std::vector<int>> arr;
};
std::variant
来实现多种类型的数组。#include<variant>
struct MyStruct {
std::variant<std::vector<int>, std::monostate> arr;
};
std::any
来实现任意类型的数组。#include <any>
struct MyStruct {
std::any arr;
};
std::map
来实现键值对数组。#include <map>
struct MyStruct {
std::map<int, int> arr;
};
std::set
来实现无序的唯一值数组。#include <set>
struct MyStruct {
std::set<int> arr;
};
std::unordered_set
来实现无序的唯一值数组。#include <unordered_set>
struct MyStruct {
std::unordered_set<int> arr;
};
通过以上方法,可以在不破坏代码的情况下正确修复"struct/union中的零大小数组"警告(C4200)。
领取专属 10元无门槛券
手把手带您无忧上云