C++中的双感叹号(!!)会花费更多的CPU时间吗
Does double exclamation (!!) in C++ cost more CPU time?
我知道进行布尔转换是个技巧。我的问题主要是关于以这种方式写作时的资源成本。编译器会忽略"!!"并直接进行隐式布尔转换吗?
如果您有任何疑问,可以检查生成的程序集;注意,在程序集级别,无论如何都不存在布尔类型。所以,是的,它可能已经全部优化了。
根据经验,混合类型的代码(因此需要类型转换)运行速度会较慢,尽管这被另一条经验规则所掩盖,即编写清晰的代码。
这取决于情况。
如果只关注可转换为bool
并且可以是!
运算符的操作数的基本类型,则这取决于编译器。根据目标系统的不同,编译器可能会发出一系列指令,以提供所需的效果,但不是以您设想的方式。此外,给定的编译器可能会以不同的方式处理问题,使用不同的优化设置(例如,编译用于调试与发布)。
唯一可以确定的方法是检查编译器发出的代码。在实践中,这不太可能产生多大影响。正如其他人所评论的那样,与其担心过早优化技术的优点,不如担心代码的清晰性和正确性。如果你有真正的需求(例如,操作在探查器识别的热点中),你将有数据来了解需求是什么,并确定采取措施的现实选择。实际上,我怀疑现实世界中有很多情况会有任何不同。
在C++中,对于用户定义的类型,所有的赌注都是不可能的。有很多可能性,比如具有返回类类型的operator!()
的类,具有operator!()
但没有operator bool()
的类。这个列表还在继续,有很多排列。在某些情况下,编译器在进行这样的转换时会不正确(例如,!!x
将被期望等效于x.operator!().operator!()
,但实际上并没有要求(除了编码指南之外)该序列提供与x.operator bool()
相同的净效果)。实际上,我不希望有太多的编译器试图在这种情况下发现机会——分析将是不平凡的,可能不会带来太多实际好处(优化单个指令很少能在编译器优化中获得好处)。同样,程序员最好专注于让代码变得清晰和正确,而不是担心编译器如何优化这样的单个表达式。例如,如果打算调用operator bool()
,那么最好提供运算符AND编写一个使用它的表达式(例如bool(x)
),而不是希望编译器将类似!!x
的破解转换为x.operator bool()
的调用。
- 分别测量每个线程上花费的 CPU 时间(C++)
- 超过CPU时间限制:当MPI_Sent一个非常大的int*时
- 如何测量一组特定线程的 CPU 时间?
- 如何以C++而不是 CPU 时间测量挂钟时间
- 将返回 CPU 时间提升为 0
- C++中的双感叹号(!!)会花费更多的CPU时间吗
- 即使使用睡眠,线程也不会放弃CPU时间
- 以C++为单位测量程序的 CPU 时间和挂钟时间
- 在 Windows 上以C++计算 CPU 时间
- 时间短函数与 CPU 时间使用 RTEMS 操作系统
- PDH 无法通过 PdhAddCounter() 访问总 CPU 时间
- 二叉搜索真的是在 0 时钟 CPU 时间内执行的吗?
- 我应该检查什么:cpu时间还是墙时间
- 使用MPI时计算CPU时间
- 堆排序CPU时间
- rusage的进程/线程的Cpu时间不可能
- 如何在 Windows 上以 C++ 为单位测量 CPU 时间并包括 system() 的调用
- 在 Ubuntu 中获取 CPU 时间
- 为什么使用 clock() 在测量 CPU 时间时得到减号
- 使用 GetProcessTimes 测量 Windows 上的 CPU 时间