问题背景
在实际开发中,我们经常需要检查多个容器是否都为空,或者是否有任意一个非空。比如在图形处理、数值计算等场景,我们需要确保多个数据源都已经准备就绪。
原始需求是这样的:我们有一个车辆轨迹曲线的容器 GwheelCurve,需要检查它是否为空,并将结果取反:
bool success = !GwheelCurve.empty();
但现在需求升级了!我们需要同时检查 5 个不同的数据容器,只要任意一个非空,就认为检查失败(success = false)。
核心思想
这个问题看似简单,但隐藏着几个关键点:
- 逻辑运算符的选择:应该用
&&还是用||? - 取反的时机:是先各自判断再组合,还是先组合再整体取反?
- 可读性和性能的平衡
让我用几个完整的代码示例来详细说明。
示例 1:错误的直观写法
#include <iostream>
#include <vector>
#include <string>
int main() {
// 假设我们有 5 个数据容器
std::vector<double> positionData; // 位置数据
std::vector<double> curvatureData; // 曲率数据
std::vector<double> gammaData; // 角度数据
std::vector<double> alphaData; // 初始角数据
std::vector<double> lambdaData; // 斜率数据
// 填充一些数据
positionData.push_back(1.0);
curvatureData.push_back(2.0);
// 其他三个容器保持为空
// ❌ 错误写法 1:直接使用容器对象
// 这行代码编译不通过,因为 vector 不能直接转换为 bool
wrongResult = !positionData.() && !curvatureData.() && !gammaData.() && !alphaData.() && !lambdaData.();
std::cout << << std::boolalpha << wrongResult << std::endl;
std::cout << << std::endl;
;
}

