【发布时间】:2015-04-22 14:34:03
【问题描述】:
我很想知道是否可以区分使用编译时常量提供的参数的函数调用和不使用的函数调用?
例如:
int a = 2;
foo( a ) // #1: Compute at run-time
foo( 3 ) // #2: Compute at compile-time
有没有办法提供区分这两种情况的重载?或者更一般地说,我如何检测文字类型的使用?
我研究过 constexpr,但函数参数不能是 constexpr。使用相同的调用语法,但能够根据参数是否为字面量类型生成不同的代码会很整洁。
【问题讨论】:
-
如果有
constexpr int foo(int x) noexcept;那么foo(3)不会在编译时计算? -
@Arun,会的。但是,您无法在
foo中判断调用是在编译时还是运行时进行的。