gpt4 book ai didi

c++ - 为什么不将 __if_exists 与局部变量一起使用?

转载 作者:行者123 更新时间:2023-11-30 04:25:41 26 4
gpt4 key购买 nike

MSDN documentation对于 Microsoft 特定的 __if_exists声明如下(强调已加):

Apply the __if_exists statement to identifiers both inside or outside a class. Do not apply the __if_exists statement to local variables.

不幸的是,没有解释为什么你不应该将它应用于局部变量。它编译得很好并且具有预期的效果,所以我想知道是否有人知道为什么他们说不要这样做。是正确性问题、可维护性问题还是其他问题?

我知道这是 Microsoft 特有的功能,不可移植,但为了争论起见,我们假设有充分的理由使用它。

编辑:有些人很好奇我为什么要这样做,所以这里有一个解释。 我意识到这是一个肮脏的 hack,所以除非你有更好的方法来做这件事的好建议,否则请不要费心指出它很恶心。考虑到代码库的庞大规模,这是我们能够找到的最简单的替代方案。

我们有大量遗留代码(数百万行)使用 Microsoft 特定的 __FUNCTION__宏作为错误记录包的一部分。该代码的很大一部分现在包含在 lambda 函数中,以便我们可以捕获结构化异常(使用 __try/__except )并且仍然使用可展开的对象。在这些 lambda 函数中,__FUNCTION__评估为无用的东西,如 `anonymous-namespace'::<lambda23>::operator() ,这对任何事情都没有用。我们的解决方法是定义新的 __FUNCTION__ -like 宏,使用 __if_exists 检查是否存在具有封闭函数名称的备用局部变量.由于宏的工作方式,我们可以轻松切换到新的 __FUNCTION__替换并轻松定义备用名称变量而无需更改大量代码,因此考虑到限制,这是一个相当干净的解决方案。也就是说,当然,假设使用 __if_exists 是有效的这样。

正如我上面所说,我知道这是一个肮脏的 hack,所以请不要告诉我它有多丑,除非你有更好的想法。

最佳答案

我不确定,但有人猜测局部变量可能会被编译器优化掉,当然也可能不会,这会导致 __if_exists 测试不可靠。

而且我也看不出对局部变量执行此操作的原因,你在那个特定范围内,你什么都知道,为什么要测试局部变量是否存在?

关于c++ - 为什么不将 __if_exists 与局部变量一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12009869/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com