C++ 11中的纯函数

Car*_*s00 8 c++ gcc c++11

C++ 11中的gcc一个可以用某种方式标记一个函数(不是类方法),const因为它告诉它是纯粹的并且不使用全局内存而只使用它的参数吗?

我试过gcc__attribute__((const)),这是正是我想要的.但是当在函数中触摸全局内存时,它不会产生任何编译时错误.

编辑1

请小心.我是指纯粹的功能.不是恒定的功能.GCC的属性有点令人困惑.纯函数只使用它们的参数.

Jos*_*eld 7

你在找constexpr?这告诉编译器可以在编译时评估该函数.一个constexpr函数必须具有字面返回和参数类型和身体只能包含静态断言,类型定义,使用声明和指令和一个return语句.甲constexpr功能可以以一个常量表达式被调用.

constexpr int add(int a, int b) { return a + b; }

int x[add(3, 6)];
Run Code Online (Sandbox Code Playgroud)

看了之后__atribute__((const)),答案是否定的,你不能用标准的C++做到这一点.使用constexpr将达到相同的效果,但仅限于更有限的功能集.然而,只要编译的程序行为相同(as-if规则),就没有什么能阻止编译器自己进行这些优化.

  • constexpr 函数不是纯函数 (2认同)