constexpr是编译器的指示符,还是强制的行为?
下面是下面的例子:
template<typename T>
std::size_t constexpr getID() { return typeid(T).hash_code(); }hash_code是一个运行时常量,但是即使使用constexpr请求编译时计算,这个片段也会是编译。只有在使用了预期编译时间常数的返回值之后,我们才会注意到这个不能用作constexpr函数。。
那么,constexpr是对编译器的“提示”(很像inline关键字)还是“绑定请求”呢?
发布于 2014-05-21 07:18:13
compile函数可用于计算编译时间常数。因此,可以这样使用它:
constexpr int func(int a) { return a+2; }
char x[func(10)];如果在运行时调用func,编译器可以在可能的情况下对该表达式进行计算。但是,如果输入也是const,则这不是必须的,但通常是这样做的。
同样重要的是,要有警察建设者。这是获得非POD类constexpr对象的唯一机会。
class Point
{
private:
int x;
int y;
public:
constexpr Point( int _x, int _y) : x(_x), y(_y) {}
constexpr int GetX() const { return x; }
};
constexpr Point p{1,2};
int main()
{
char i[p.GetX()];
return 0;
} https://stackoverflow.com/questions/23775705
复制相似问题