Рассмотрим следующий (немного продуманный) пример:
// 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
или одна из его вариаций, похоже, тоже не работают. Взгляд на код вывода со всеми включенными оптимизациями (переключатель /Ox
) показывает, что компилятор действительно генерирует два вызова. Это происходит даже в том случае, если я помещаю обе функции в один модуль.
Любое решение для этого или кто-нибудь может подтвердить, что в VС++ нет решения?
/Ox
, и даже если в одном модуле он дважды встраивает функцию. - person cxxl   schedule 16.09.2013