在 C# 中,当想要显式忽略操作结果时,有一个方便的功能,使用下划线
_
作为丢弃变量。
我目前正在 C++ 中寻找等效的功能或解决方法,它允许我在从函数检索多个值时丢弃特定值或节省内存分配。
示例:
假设我有一个这样的函数:
void readValues(float& temperature, float& humidity, float& dewpoint, float& tempTrend, float& humTrend) {
// Some operation to retrieve values
}
如果我只需要知道温度,并且没有特定于温度的函数,如何以最节省内存的方式丢弃其他值?
或者任何其他方法可以在忽略 Arduino/ESP32 环境中函数的某些返回值时帮助节省内存空间?
我现在在做什么:
float temperature;
float discard;
readValues(temperature, discard, discard, discard, discard);
我尝试过的:
float temperature;
readValeus(temperature, null_ptr, null_ptr, null_ptr, null_ptr);
float temperature;
readValues(temperature, 0, 0, 0, 0);
感谢您的任何见解或建议!
有几种方法可以做到这一点。 首先,在这种情况下我不会担心内存效率问题。 即使您始终返回所有值,未使用的值及其创建也可能会被优化掉。
此外,输出参数在 C++ 中通常不受欢迎。您可以将内容打包到
struct
中,然后简单地使用其中您感兴趣的部分。
void readValues(float& temperature, float& humidity, float& dewpoint);
void readValues(float& temperature, float& humidity);
第二个重载使
humidity
实际上成为可选参数。
void readValues(float& temperature, float& humidity, float* dewpoint = nullptr);
// ...
readValues(t, h); // don't provide dewpoint
readValues(t, h, &d); // provide dewpoint
这是我个人的最爱。
struct Weather {
float temperature;
float humidity;
float dewpoint;
};
Weather readValues();
// ...
Weather w = readValues();
auto [t, h, d] = readValues();
auto [t, h, _] = readValues();