【发布时间】:2019-11-18 10:15:47
【问题描述】:
当标准函数接受模板化参数而不修改它时,它似乎总是接受const ref(例如:std::vector::insert)。
这是否意味着类似 bool 参数的函数将变为 std::vector<bool>::insert(const bool& value) ?
或者是否有一些优化使其变为std::vector<bool>::insert(bool value)?如果是,我自己的模板函数也会从中受益吗?
【问题讨论】:
-
为什么要优化?
-
通过值而不是引用传递布尔值不是更好吗? (据我了解,通过引用传递意味着传递变量的地址,例如大小为 8 位,而不是大小为 1 bool)
-
bool是 1 个字节。顺便说一句,std::vector<bool>是尝试将bool优化到一位可能出错的最佳示例 -
当调用被内联(向量模板就是这种情况)时,这无关紧要 - 编译器使用 const refs 对原始类型执行相同的优化。
-
这样的函数很可能是内联的,所以没有任何物理传递。当它没有内联时,通常不可能进行这样的优化。
标签: c++ templates parameter-passing