![](/img/trans.png)
[英]constexpr const char * vs constexpr const char[]
[英]Is there any theoretical difference in performance in an inline constexpr function that compares an `int` & `int` VS a `const char* & `const char*`?
int
& int
VS a const char*
& const char*
的inline constexpr
function 的性能是否存在理论上的差异? 示例 1( int
等于int
)
struct some_struct {
int m_type;
...
inline constexpr
void somefunc() {
if (m_type == 0) {
...
} else if (m_type == 1) {
...
}
}
};
示例 2( const char*
等于const char*
)
struct some_struct {
const char* m_type;
...
inline constexpr
void somefunc() {
if (strcmp(m_type, "some_str_1")) {
...
} else if (strcmp(m_type, "some_str_2")) {
...
}
}
};
正如@RichardCritten 指出的那样, strcmp
不是constexpr
function。 虽然在我的实际代码中,我有一个自定义strcmp
function,它是一个constexpr
function。
Consexpr 函数仅在需要时在编译时计算,我的意思是在常量表达式中。
所以在常量表达式中,运行时的性能没有差异(编译时间可能不同)。
在非常量表达式中,函数在运行时与任何常规函数一样计算(使用 as-if 规则,优化器可能会优化并返回编译时计算的结果,在这方面constexpr
可能是编译器的提示)。
这取决于。
一切都可以在编译时完成吗? 不必要。 如果是,那么运行时当然不会有任何区别。
对于运行时? 在某些机器上,根据架构, int
和char*
的比较可能是相同的。
这可以通过查看汇编代码来找到。 尽管如此,一些 CPU 内部程序也会产生影响。
但是,将整数类型与 C 风格的字符串进行比较很少有相同的性能,因为对于一个字符串,需要比较许多字节。 在这里,现代 CPU 架构和汇编指令也可能有所帮助。
我对您的问题(似乎是xy 问题)的回答是:
很可能存在差异,但这取决于。 . .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.