【问题标题】:When does a const return type interfere with template instantiation?const 返回类型何时会干扰模板实例化?
【发布时间】:2010-05-28 02:29:33
【问题描述】:

来自 Herb Sutter 的 GotW #6

对于非内置返回类型,按值返回通常应该是 const。 ...

注意:Lakos(第 618 页)反对返回 const 值, 并指出无论如何它对于内置程序都是多余的 (例如,返回“const int”),他指出这可能 干扰模板实例化。

虽然 Sutter 在使用 Lakos 按值返回非内置类型的对象时似乎不同意返回 const 值还是非常量值,但他通常同意返回内置类型的 const 值 (例如 const int) 不是一个好主意。

虽然我理解为什么这是无用的,因为返回值是右值,因此无法修改,但我找不到如何干扰模板实例化的示例。

请给我一个例子,说明返回类型的 const 限定符如何干扰模板实例化。

【问题讨论】:

    标签: c++ templates constants return-value


    【解决方案1】:

    这是一个涉及函数指针的简单示例:

    const int f_const(int) { return 42; }
    int f(int) { return 42; }
    
    template <typename T>
    void g(T(*)(T))
    {
        return;
    }
    
    int main()
    {
        g(&f_const); // doesn't work:  function has type "const int (*)(int)"
        g(&f);       // works: function has type "int (*)(int)"
    }
    

    请注意,Visual C++ 2010 错误地接受这两者。 Comeau 4.3.10 和 g++ 4.1.2 正确地不接受g(&amp;f_const) 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 2022-01-16
      • 1970-01-01
      • 2018-06-02
      • 2019-10-18
      • 1970-01-01
      相关资源
      最近更新 更多