我一直在使用C++,但从未真正深入细节。最近发现约constexpr
,我认为它具有微优化的巨大潜力,尽管我很难看到如何正确使用它。考虑到以下几点:constexpr的使用案例与定义
#define squared(n) (n * n)
和
constexpr int squared(int n) {
return n * n;
}
他们都输出同样的事情,但我敢肯定,他们有很大的不同。根据我的知识,定义指令在编译时被替换,因此squared(n)
的任何实例都只是(n * n)
。
显然这是一个简单的例子,但我想知道constexpr
在哪里发挥作用?它是否意味着用于比简单文本替换更复杂的操作?使用它的主要优点是什么?它与正常表达式有什么不同?
'squared(i ++)'... – 2014-10-27 08:43:54
或'squared(1 + 1)'...... – Henrik 2014-10-27 08:49:40
@Henrik好的,但是可以通过在内部使用'(n)'来获得帮助,所有“理智的宏“(就像那个表达所表达的那样是矛盾的)。 – Angew 2014-10-27 08:52:54