为函数参数创建静态而不是临时

时间:2014-05-15 14:38:35

标签: c++

我正在寻找一些C ++语法糖,如果有办法做到这一点。我有一个将字符串映射到int的类,并定义了一个int强制转换操作符:

class C {
    public:
        C(const char * s) { m_index = /* value generated from s */; }
        operator int(void) const { return m_index; }
    protected:
        int m_index;
}

如果我执行以下操作:

void foo(int f);
...
static const C s_c("TEST");
foo(s_c);

编译器只调用C的构造函数一次,并重用在每次后续使用s_c时获得的int值;这是理想的行为。我的问题是,有什么办法可以做:

foo(C("TEST"));

并让编译器生成一个静态的,如上所述,而不是每次代码被命中时临时和命中构造函数?

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果您可以使用C ++ 11,则可以使用constexpr对文字进行转换:

// shamelessly copy-pasted from elsewhere
constexpr int some_hash(char const *in) {
  return *in ? static_cast<int>(*in) + 33 * some_hash(in + 1) : 5381;
}

请注意,您有一些相当大的限制:没有临时或静态,无法访问外部变量等。