gpt4 book ai didi

c++ - 编译器会根据我处理未引用参数的方式做不同的事情吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:58 25 4
gpt4 key购买 nike

所以我看到很多线程解释如何避免未引用的参数警告,例如:

Avoid warning 'Unreferenced Formal Parameter'
C++ What is the purpose of casting to void?

但我想知道的是,编译器是否会根据所使用的方法做任何不同的事情。比如下面三种情况的编译输出会有什么不同吗?

void Method(int /*x*/)
{
// Parameter is left unnamed
}

void Method(int x)
{
x; // This would be the same as UNREFERENCED_PARAMETER(x);
}

void Method(int x)
{
(void)x; // This would be the same as _CRT_UNUSED(x);
}

从编译器将做什么的角度来看,我对此最感兴趣,但是如果您对一种方法比其他方法有强烈的感觉,我也很高兴听到这些争论。

最佳答案

在大多数情况下,在这三个选项中,最后一个选项 (void)x; 更可取。

第一个选项,保留参数未命名,是可以接受的,但通常为参数命名以用于调试目的是有用的(例如,即使您没有在函数中使用参数,您可能会对调试时的值)。但是,有些情况下此选项很好,例如做的时候 tag dispatching .

第二个选项,x; 可能会导致其他警告。 Visual C++ 将针对此代码发出警告 C4555:

warning C4555: expression has no effect; expected expression with side-effect

通过 (void)x;x 转换为 void,此警告将被抑制。 (请注意,默认情况下此警告处于关闭状态;必须通过 #pragma 或命令行选项明确启用此警告。)

关于c++ - 编译器会根据我处理未引用参数的方式做不同的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004157/

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