有时候,我看到这样的代码:为什么comment参数的名称,而不是离开它,因为它是
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
为什么评论参数的名称,而不是离开它,因为它是什么?
有时候,我看到这样的代码:为什么comment参数的名称,而不是离开它,因为它是
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
为什么评论参数的名称,而不是离开它,因为它是什么?
我看到这样做的一个原因是,您明确地想要告诉其他程序员不要使用这些参数,但将它们留在注释中以描述他们的意图。我知道这没有意义现在,但继续阅读。
我会用不同的例子:
class A
{
public:
virtual void foo(int someProperty);
};
class B : public A
{
public:
virtual void foo(int /*someProperty*/);
};
说你想要这个特定情况下,你想B::foo()
做一些额外的东西,然后调用A::foo()
与参数0
。你必须保持相同的函数签名,所以多态性的作品,但在B::foo()
,你实际上没有使用参数。你也不想在将来使用它。这基本上是一个意图声明,说“这种方法的逻辑不应该取决于某些房产”。
B::foo(int/*someProperty*/)
{
//do some stuff
A::foo(0);
}
随着注释掉的参数名称,你不能真正使用它(除非你到一些hacking)。但是评论的名字告诉你一些关于你传递给A::foo()
的参数 - 它的'someProperty'从A
。
现在,我不同意语法,但这可能是一个可能的解释。
如果被调用的函数(例如OnPaint
)没有使用参数,那么编码器可以在编译时通过不提供参数名称来避免关于未使用参数的警告消息。
某些编译器在您评论参数时不会发出“未使用的参数警告”,或者不会首先提供该参数。但是,当然你需要让这个类型拥有正确的签名。
如果真的没有需要的参数,你不需要给它们命名
如果没有他们的名字,乍一看你可能不明白,为什么他们在那里摆在首位。
如果你命名它们,一些编译器会提醒你未使用的参数。
将名称留为评论是两种方法之间的中间立场。
如果是这样的onPaint()
的定义开始,我已经看到注释掉用来避免"unreferenced formal parameter"
编译器警告参数名称(这些警告只会出现在较高的警告级别,微软编译器-W4
水平)。
我认为有些编译器发布了“未使用的参数”警告,当然这些参数没有被使用。
尤其是在您所显示的消息处理函数中,通常不需要参数来执行任务。因此,通过评论名称名称出来,你可以摆脱警告。另一方面,如果您稍后想要使用某些参数,则手头的名称很有用,因此注释比删除名称更简单。
编译器在设置为/ w4时仍然会生成这些警告 – Stefan 2012-02-07 15:43:55
好的,我不确定。似乎我总是在我最近的C++项目中使用了所有的参数:) – MartinStettner 2012-02-08 09:36:15
也许接管代码的人知道参数名称在函数声明中不是强制性的,而编写代码的人不知道这个事实。它只是一个优先于另一个。 – 2012-02-07 11:20:49