在C#中,当想要显式忽略操作结果时,有一个方便的特性,使用下划线_
作为丢弃变量。
我目前正在C++中寻找一个等效的功能或解决方法,允许我在从函数中检索多个值时丢弃特定值或保存内存分配。
示例:
假设我有一个这样的函数:
void readValues(float& temperature, float& humidity, float& dewpoint, float& tempTrend, float& humTrend) {
// Some operation to retrieve values
}
字符串
如果我只需要知道温度,而我没有一个特定于温度的函数,我如何以最有效的方式丢弃其他值?
或者任何其他方法可以帮助在Arduino/ESP 32环境中忽略函数的某些返回值时节省内存空间?
我现在在做什么:
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);
的字符串
感谢您的任何见解或建议!
2条答案
按热度按时间5us2dqdw1#
有几种方法可以做你想做的事情。但是没有直接等价于
discard
关键字。首先,在这种情况下,我不会担心内存效率,即使你总是返回所有值,未使用的值和它们的创建可能会被优化掉。
此外,输出参数在C++中通常是不受欢迎的。(参见F.20:对于“out”输出值,首选返回值而不是输出参数)您可以将东西打包到
struct
中,然后简单地使用您感兴趣的部分。无论如何,这里有一些可能的解决方案:(1)函数重载
字符串
第二个重载使
dewpoint
有效地成为可选参数。(2)指针和默认参数
型
(3)避免输出参数
这是我个人的最爱。
型
(4)
[[maybe_unused]]
型
您仍然需要提供一个额外的参数,但是
[[maybe_unused]]
清楚地表达了意图,并抑制了有关未使用变量的警告(如果有的话)。v1l68za42#
实现某种
_
代理,提供对象来存储输出值,但不对它做任何事情,这是很简单的。字符串
online compiler
在生产代码中,最好提供正确命名的参数,并显式地将它们标记为未使用,或者发明一个更好的查询接口,不需要每次都提供这么多参数,其中大部分都被丢弃。