次の (少し想像された) 例を考えてみましょう。
// 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)
2 回呼び出す代わりに再利用できることをコンパイラに伝えることができれば、非常に便利です。
それについてのドキュメントには何も見つかりません。restrict
または、その差異の1つも機能していないようです。すべての最適化 (switch /Ox
) をオンにした出力コードを見ると、コンパイラが実際に 2 つの呼び出しを生成していることがわかります。両方の機能を 1 つのモジュールに入れても、そうです。
これに対する解決策はありますか、またはVC ++に解決策がないことを誰かが確認できますか?