有时我看到这样的代码:
LRESULT OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
Run Code Online (Sandbox Code Playgroud)
为什么要注释参数名称而不是保持原样?
Mar*_*ner 12
我认为有些编译器在没有使用参数的情况下发出了"未使用的参数"警告.
特别是在您展示的消息处理函数中,参数通常不是执行任务所必需的.因此,通过评论参数名称,您可以摆脱警告.
另一方面,如果您以后想要使用某些参数,那么掌握名称很有用,因此注释比仅删除名称更容易.
我看到这样做的一个原因是你明确地想要告诉其他程序员不要使用这些参数,而是将它们留在注释中以描述它们的意图.我知道这现在没有意义,但请继续阅读.
我将使用另一个例子:
class A
{
public:
virtual void foo(int someProperty);
};
class B : public A
{
public:
virtual void foo(int /*someProperty*/);
};
Run Code Online (Sandbox Code Playgroud)
假设你想要一个特殊的情况,你想做B::foo()一些额外的东西,然后A::foo()使用参数调用0.你必须保持相同的函数签名,因此多态性有效,但是,在内部B::foo(),你实际上并没有使用参数.你也不想在将来使用它.它基本上是一个意图陈述,说"这种方法的逻辑不应该依赖于某些属性".
B::foo(int/*someProperty*/)
{
//do some stuff
A::foo(0);
}
Run Code Online (Sandbox Code Playgroud)
随着参数名称被注释掉,你无法真正使用它(除非你得到一些黑客攻击).但是注释名称告诉你一些你传递给A::foo()它的参数- 它的'someProperty' A.
现在,我不同意语法,但这可能是一个可能的解释.