![]() |
1
1
你现在的代码很好。如果条件每次都采用不同的分支,则只会损害管道计算。当这个标志只写一次时,分支预测做得非常好。
总之,你的问题的常见解决方案是C预处理器宏。在技术上可以解决的问题。
如果你只想制作库头,也可以用模板来解决,但要复杂一些。由于编译时间开销等原因,我尽量避免模板跨越库边界。 |
![]() |
2
0
我认为这个例子太过简化,看不出它的意图。所以让我假设你有充分的理由这么做。 首先,确保您正在MSVC上进行优化,这将是在命令行中添加/O2(或类似内容)。 第二,衡量。CPU中的分支预测器非常有效,您可能甚至没有注意到。
也就是说,当编译器看到
当有疑问时,或者当您想在编译时强制它时,使用
另一种选择是将函数设置为constexpr,这可能并不总是可行的,尽管它看起来是这样的:
你可以这样称呼它:
这样,编译器就需要在编译时计算s1的值。而它可以在运行时重用该函数来计算s2。(注意变量i被传递) 关于链接器错误,C++中有一个ODR(一个定义规则)。您可以通过添加内联来绕过它,但是,您应该在任何地方都有相同的实现!我不建议将实现放在CPP文件中,因为它是UB的收据。 |
![]() |
notamaster · 匿名命名空间中的变量声明和其他位置的定义 2 年前 |
![]() |
oink · 模板类型推断是否可以考虑基元操作类型转换? 7 年前 |
![]() |
Lingxi · 删除未使用新表达式构造的对象实际上可以吗? 7 年前 |
![]() |
HappyCactus · 从强类型的元组生成PoD的元组 7 年前 |
|
Shabbar · 如何在共享类时隐藏成员函数文件 7 年前 |