除了事实,它可能混淆每个Windows c ++开发人员,
将_In_
扩展为强制const
(如果尚未存在)以确保常规正确性是不谨慎的?
所以
int DoSomething( _In_ int * pInput);
变为
int DoSomething( const int * pInput);
显然_ [In] Out_仍应扩展为 nothing 。
编辑:显然第一个问题是,这只在扩展指针或参考参数的前面时才有意义。
所以也许简单的宏扩展是不够的。我还不想放弃执行const
的概念。座右铭是:我们已经有一个SAL
符号告诉我们什么参数是ro
,什么不是,让我们使用它。
答案 0 :(得分:1)
假设它是一个宏扩展,那对复制到参数中的值不起作用,即
void f( _In_ X x) { g(++x); // ok to modify }
答案 1 :(得分:1)
即使使用了SAL注释,您也应该培训程序员使用const
作为不可变的指针/引用参数。
以下是将_In_
扩展为const
的一些问题:
_In const int*
并可能会遇到编译器错误,具体取决于编译器是否诊断为double const。const
个成员(因为这是一个特定于C ++的东西)。这意味着指向const接口的指针绝对没用。但是,您经常会传递接口类型的_In_
或_In_opt_
个参数。