c++ - 编译器是否优化 C++ 中静态值的 if 语句

标签 c++ performance optimization c++11

我正在为拼贴作业开发通用库类,代码尽可能高效地运行非常重要,也就是说,如果我们可以减少 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/

相关文章:

optimization - "high contrast"曲线的快速公式

javascript - jQuery 选择器的速度似乎是错误的我的代码

c++ - 读取一个txt文件显示异常

c++ - DXGI 屏幕捕获图像失真

android - 为什么应用程序性能变慢??当图库中的相机图像已存储在 imageview 中时

c++ - 我可以在 Rust 中就地构建吗?

c++ - 基于返回类型的转换和重载扣除

c++ - qt类中的线程

java - 如何优化 Scala 中的 for-comprehensions 和循环?

matlab - 如何将 `find` 命令替换为 `logical indexing` (MATLAB),以查找唯一值的向量值位置?