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>;)仅影响编译,并在运行时开始时完全删除.