考虑以下(有点构思)的示例:

// 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

10-05 22:40