我正在为拼贴作业开发通用库类,代码尽可能高效地运行非常重要,也就是说,如果我们可以减少 if 语句,我们就应该这样做。
如果数组是基本类型(如 double 或 int),我需要使用以下代码来初始化数组。
T b[dim];
if(std::is_fundemental::<T>::value)
{
memset(b, 0, dim*sizeof(T));
}
现在的问题是这个检查是否被优化,这样它就不会进行运行时检查,或者我是否需要为初始化创建一个模板,并专门针对基本类型?
我将 G++ 与 C++11 一起使用,但它应该能够在大多数(最好是所有)编译器上不检查的情况下运行。
最佳答案
标准没有解决优化问题,但我无法想象 一个不会做这种优化的编译器。但是这样做吗 真的很重要:你说的最多是一两台机器 指令,之后你调用一个函数,它做了很多 更多的。正式来说,除了积分外不起作用 类型。 (并不是说我听说过有双 所有 0 位都不是 0.0。)
但 FWIW:std::uninitialized_fill_n
应该至少一样快,
并且您不需要 if
,因为它适用于所有类型。
关于c++ - 编译器是否优化 C++ 中静态值的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16563738/