是否可以在C ++中指定编译时间“纯度”检查?
即:
this function does not read from anything other than it's arguments
this function does not write to anything; it only returns the return value
答案 0 :(得分:4)
const-correctness和高编译器警告级别应该可以满足您的要求。同时为编译器指定一种非常严格的C ++现代方言(当你使用第三方库和不遵守的代码时,它可能会让你感到厌烦)
如果没有,那么有大量的静态分析工具,一些开源,一些昂贵的像Coverity,Parasoft C ++ Test等。
答案 1 :(得分:2)
虽然没有可移植的方法来执行此操作,但gcc实现了function attributes,这可能与您感兴趣的内容很接近。您应该检查的两个特定属性是:
pure - 除了返回值之外,许多函数没有任何效果,它们的返回值仅取决于参数和/或全局变量。这样的函数可以像算术运算符那样经受公共子表达式消除和循环优化。应使用pure。
属性声明这些函数
和
const - 许多函数不会检查除参数之外的任何值,除了返回值之外没有任何效果。基本上这只是比下面的纯属性稍微严格的类,因为不允许函数读取全局内存。
您可以将属性指定为原型的一部分:
int square (int x) __attribute__ ((const));
int square (int x)
{
return x * x;
}