"使用"的开销

bre*_*att 10 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 
    }
};
Run Code Online (Sandbox Code Playgroud)

要么:

struct B {

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

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

       // TODO: use WrapperType 
    }
};
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:

在本地定义类型是否有任何开销B?(比较时A)?

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

话虽这么说,B在我们的例子中是优选的,因为我理想地想用各种类型调用这个代码.是的,这确实需要在课堂上.我刚刚简化了这个例子.

YSC*_*YSC 29

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

不,没有.

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

  • 正是我想听到的......我认为这就是答案,但我只是想确定一下. (3认同)