首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是对编译器的“提示”(如内联)还是“绑定请求”?

是对编译器的“提示”(如内联)还是“绑定请求”?
EN

Stack Overflow用户
提问于 2014-05-21 06:37:27
回答 4查看 1.3K关注 0票数 20

constexpr是编译器的指示符,还是强制的行为?

下面是下面的例子:

代码语言:javascript
复制
template<typename T> 
std::size_t constexpr getID() { return typeid(T).hash_code(); }

hash_code是一个运行时常量,但是即使使用constexpr请求编译时计算,这个片段也会是编译。只有在使用了预期编译时间常数的返回值之后,我们才会注意到这个不能用作constexpr函数。

那么,constexpr是对编译器的“提示”(很像inline关键字)还是“绑定请求”呢?

EN

Stack Overflow用户

发布于 2014-05-21 07:18:13

compile函数可用于计算编译时间常数。因此,可以这样使用它:

代码语言:javascript
复制
 constexpr int func(int a) { return a+2; }

 char x[func(10)];

如果在运行时调用func,编译器可以在可能的情况下对该表达式进行计算。但是,如果输入也是const,则这不是必须的,但通常是这样做的。

同样重要的是,要有警察建设者。这是获得非POD类constexpr对象的唯一机会。

代码语言:javascript
复制
    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;
    }   
票数 2
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23775705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档