C++ 中是否存在相当于 C# 中变量丢弃'_'的等效项?

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

在 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# c++ memory-management arduino-c++ equivalent
1个回答
0
投票

有几种方法可以做到这一点。 首先,在这种情况下我不会担心内存效率问题。 即使您始终返回所有值,未使用的值及其创建也可能会被优化掉。

此外,输出参数在 C++ 中通常不受欢迎。您可以将内容打包到

struct
中,然后简单地使用其中您感兴趣的部分。

(1)函数重载

void readValues(float& temperature, float& humidity, float& dewpoint);
void readValues(float& temperature, float& humidity);

第二个重载使

humidity
实际上成为可选参数。

(2) 指针

void readValues(float& temperature, float& humidity, float* dewpoint = nullptr);
// ...
readValues(t, h);     // don't provide dewpoint
readValues(t, h, &d); // provide dewpoint

(3)避免输出参数

这是我个人的最爱。

struct Weather {
    float temperature;
    float humidity;
    float dewpoint;
};

Weather readValues();

// ...
Weather w = readValues();
auto [t, h, d] = readValues();
auto [t, h, _] = readValues();
© www.soinside.com 2019 - 2024. All rights reserved.