C++ 11中的gcc
一个可以用某种方式标记一个函数(不是类方法),const
因为它告诉它是纯粹的并且不使用全局内存而只使用它的参数吗?
我试过gcc
的__attribute__((const))
,这是正是我想要的.但是当在函数中触摸全局内存时,它不会产生任何编译时错误.
编辑1
请小心.我是指纯粹的功能.不是恒定的功能.GCC的属性有点令人困惑.纯函数只使用它们的参数.
你在找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规则),就没有什么能阻止编译器自己进行这些优化.