gpt4 book ai didi

c++ - C++ 会优化空/非虚拟/无效方法调用吗?

转载 作者:行者123 更新时间:2023-11-28 02:53:55 25 4
gpt4 key购买 nike

示例代码:

class DummyLock {
public:
void lock() {}
void unlock() {}

};

...

template <class T>
class List {
T _lock;

...
public:
void append(void* smth) {
_lock.lock();

...

_lock.unlock();
}
};

...
List<DummyLock> l;
l.append(...);

那么,如果锁类型是模板类型,它会优化掉这些方法调用吗?如果不是,制作将策略作为模板参数的模板列表的最佳方法是什么(如 Andrei Alexandrescu C++ 书中所述)

最佳答案

假设启用了内联(因此“启用了一些优化”),那么是的,任何体面的编译器都应该将这种事情变成零指令。特别是在模板中,因为模板要求[至少在几乎所有当前的编译器中]编译器“查看”对象的源代码。在非模板化情况下,可能会出现这样一种情况,即您“越界”声明了空的 lock 代码,而编译器无法知道该函数为空。

(在你的 append 中使用 void *smth 看起来很可怕 - 我希望你确实打算在你的实际实现中将它作为第二个模板类型)

与往常一样,当谈到“编译器是否这样做”时,如果它真的很重要,您需要检查您的编译器在这种特定情况下是否按照您的预期进行。例如,clang++ -Sg++ -S 会显示您的 append 函数中是否有调用。

关于c++ - C++ 会优化空/非虚拟/无效方法调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com