c++ - `using`的开销

标签 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 在我们的例子中更可取,因为理想情况下我想用各种类型调用此代码。是的,这确实需要在类里面。我刚刚极度简化了这个例子。

最佳答案

Is there any overhead [on the generated code] of defining a type locally like in B?

不,没有。

定义类型别名(您对 using WrapperType = Wrapper<U>; 所做的)只会影响编译,一旦运行时开始就会完全删除。

关于c++ - `using`的开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49976972/

相关文章:

mysql - 如何优化大表查询

Scala 类型别名破坏了类型兼容性

singleton - 对象的类型别名和val之间的区别

c++ - 是否可以创建模板别名?

c++ - make_heap和pop_heap可以,但是push_heap不能

c++ - 是否有具有用户定义的碰撞处理程序的 std::unique 风格的库算法?

java - 为什么 Java 和 Wireshark 中的时间戳不匹配?

Java创建螺旋

c++ - 为小型循环计数器选择什么数字类型?

c++ - 在 Qt 中,我试图在 QLabel 上绘画,但 QPaintEngine 说要关闭。详情如下 :