考虑以下(有点构思)的例子:
// 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++ 中没有解决方案吗?