【发布时间】:2014-11-11 10:53:51
【问题描述】:
除了这个事实,它可能混淆那里的每个 windows c++ 开发人员,
将_In_ 扩展为强制const(如果尚未存在)以确保 const 正确性不是谨慎的做法吗?
所以
int DoSomething( _In_ int * pInput);
变成
int DoSomething( const int * pInput);
显然 _[In]Out_ 仍应扩展为 nothing。
编辑:显然第一个问题是,这仅在在指针或引用参数的前面展开时才有意义。
所以也许一个简单的宏扩展是不够的。我还不想放弃强制执行const 的想法。座右铭是:我们已经有一个SAL 表示法,它告诉我们ro 是什么参数,什么不是,让我们使用它。
【问题讨论】:
-
不是真正的问题,为什么参数首先是指针?
-
没有。而是,我可以(与预编译器合作)确定以下参数是否真的是一个指针。
-
@SebastianRedl:我不认为
boost::optional<>将其纳入 C++11 规范(尽管cppreference has a related entry?,所以有什么方便的替代方法可以传递一个没有的可选参数一个方便的哨兵值,为什么它总是更好? -
@TonyD:
optional没有成功,甚至在 14 中也没有。但是 SAL 有一个单独的注释来表示“这是一个指针,因为它是可选的”:_In_opt_。由于示例中的参数只是_In_,我很好奇。 -
@MrPaulch 预处理器永远不会与你合作,尤其是在类型问题上,因为它纯粹在令牌上运行。
标签: c++ const-correctness sal