c++ - 使用 Visual C++ 将函数标记为没有副作用

标签 c++ visual-c++ side-effects restrict-qualifier

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

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

关于c++ - 使用 Visual C++ 将函数标记为没有副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831722/

相关文章:

c++ - 连接预处理器定义和字符串以创建#include 路径

c# - C++ 转换为 C#

c++ - 使用 std::sort 根据数据类型中包含的整数值对混合数据类型 vector 进行排序有多安全?

将一对插入映射 vector 时出现 C++ 错误

c++ - 将 C 组件集成到 C++ 框架中的最佳实践是什么?

javascript - 如何处理 tree shaking 代码中的副作用?

functional-programming - 函数式编程的副作用

language-agnostic - 一个方法究竟什么时候有副作用?

c++ - 尝试添加数组元素给出零

C++ Linux 代码破坏了 Windows 构建,因为缺少 header 意味着函数未定义