考虑以下(有点构思)的示例:
// 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。