考虑以下(有点构思)示例:
// a.cpp
int mystrlen(const char* a) {
int l = 0;
while (a[l]) ++l;
return l;
}
// b.cpp
extern int mystrlen(const char*);
int foo(const char* text) {
return mystrlen(text) + mystrlen(text);
}
能够告诉编译器 mystrlen()
没有副作用,因此它可以重新使用 mystrlen(text )
而不是调用它两次。
我在文档中找不到任何关于它的内容,而且 restrict
或其变体之一似乎也无法完成这项工作。查看所有优化 (switch /Ox
) 的输出代码表明编译器确实生成了两个调用。如果我将这两个功能放在一个模块中,它甚至会这样做。
对此有任何解决方案或任何人都可以确认在 VC++ 中没有解决方案吗?
最佳答案
MSVC 不支持 pure/const 属性,也无意支持它们。参见 https://connect.microsoft.com/VisualStudio/feedback/details/804288/msvc-add-const-and-pure-like-function-attributes .其他编译器,例如 GCC 和 Clang 确实支持此类属性。另见 pure/const function attributes in different compilers .
关于c++ - 使用 Visual C++ 将函数标记为没有副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831722/