将_In_扩展为常量
Expand _In_ to const
除了这可能会让所有windows c++开发人员感到困惑之外,
将_In_
扩展为强制性的const
(如果还没有)以确保常量的正确性,这不是很谨慎吗?
所以
int DoSomething( _In_ int * pInput);
成为
int DoSomething( const int * pInput);
显然,_[In]Out_仍然应该扩展到nothing。
编辑:显然,第一个问题是,只有当在指针或引用参数的前面展开时,这才有意义。
因此,也许一个简单的宏观扩张是不够的。我现在还不想放弃强制执行const
的概念。座右铭是:我们已经有了SAL
表示法,它告诉我们什么参数是ro
,什么不是,让我们利用它
假设它是一个宏扩展,那么对于复制到参数中的值(即)来说就不起作用
void f( _In_ X x) { g(++x); // ok to modify }
您应该训练您的程序员将const
用于不可变的指针/引用参数,即使使用SAL注释也是如此。
以下是将_In_
扩展为const
:的一些问题
- 以前没有看过SAL注释的程序员会特别困惑
- 然后,这些程序员将编写
_In const int*
,并可能得到编译器错误,这取决于编译器是否诊断为双常量 - 对于程序员想要在函数内部修改的按值参数来说,这很烦人
- 这对COM接口指针来说是灾难性的。COM接口从来没有
const
成员(因为这是一件非常特定于C++的事情)。这意味着指向const接口的指针是绝对无用的。但是,您仍然会经常传递接口类型的_In_
或_In_opt_
参数
相关文章:
- #定义c-预处理器常量..我做错了什么
- netcat command in c++
- Difference in displaying cv2 Mat
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- C++ MFC Libraries in Travis CI
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 将非常量整数从 in C++传递给模板参数
- :<built-in>1:2: 警告:使用 C++0x 长整型整数常量 [-Wlong-long]
- 比较 std::字符串与常量 vs 比较 char 数组与常量 In C++.