“使用”

时间:2018-04-23 08:54:37

标签: c++ optimization type-alias

对于我的问题,我可以用两种方式使用using指令。他们基本上归结为这些选择:

template<typename U>
struct A {
private:

    // Define our types
    using WrapperType = Wrapper<U>;

public:

    U *operator()(U *g) const {
       // TODO: use WrapperType 
    }
};

或者:

struct B {

    template <typename U>   
    U *operator()(U *g) const {

       // Define the types here instead.
       using WrapperType = Wrapper<U>;

       // TODO: use WrapperType 
    }
};

在这两种情况下,都会有其他类模板参数。所以B仍然会有模板参数,即使它在这个简化的示例中看起来不像它。

我的问题是:

B中是否存在本地定义类型的开销? (与A比较时)?

我不清楚类型声明如何影响生成的代码。代码必须实时运行,这将是代码库的核心。因此,如果有任何开销,我不能使用B

话虽如此,B在我们的案例中更为可取,因为我理想地希望用各种类型调用此代码。是的,这确实需要在课堂上。我刚刚简化了这个例子。

1 个答案:

答案 0 :(得分:29)

  

在生成的代码上是否存在像在B中那样在本地定义类型的开销?

不,没有。

定义类型别名(使用using WrapperType = Wrapper<U>;执行的操作)仅影响编译,并在运行时开始时完全删除。