我花了很长时间试图提出一个不违反C/C++标准的恒定时间轮换。问题是边缘/角落的情况,其中操作在算法中被调用并且这些算法无法更改。例如,以下来自Crypto++并在GCCubsan下执行测试工具(即,g++fsanitize=undefined):$./cryptest.exev|grepruntimemisc.h:637:22:runtimeerror:shiftexponent32istoolargefor32-bittype'unsignedint'misc.h:643:22:runtimeerror:shiftexponent32istoolargefor32-bittype'
我花了很长时间试图提出一个不违反C/C++标准的恒定时间轮换。问题是边缘/角落的情况,其中操作在算法中被调用并且这些算法无法更改。例如,以下来自Crypto++并在GCCubsan下执行测试工具(即,g++fsanitize=undefined):$./cryptest.exev|grepruntimemisc.h:637:22:runtimeerror:shiftexponent32istoolargefor32-bittype'unsignedint'misc.h:643:22:runtimeerror:shiftexponent32istoolargefor32-bittype'
std::stringsize()是O(1)运算吗?我使用的STL的实现是VC++内置的 最佳答案 如果您要问MSVC的string::size()实现是否具有恒定的复杂性,那么答案是肯定的。但是DonWakefield提到了C++标准23.1中的表65,它说size()的复杂性应该遵循“注释A”中所说的内容。注A说:Thoseentriesmarked‘‘(NoteA)’’shouldhaveconstantcomplexity.但是,这并不意味着这些条目应该具有恒定的复杂性。标准使用非常具体的术语,“应该”意味着它不是强制性的。
std::stringsize()是O(1)运算吗?我使用的STL的实现是VC++内置的 最佳答案 如果您要问MSVC的string::size()实现是否具有恒定的复杂性,那么答案是肯定的。但是DonWakefield提到了C++标准23.1中的表65,它说size()的复杂性应该遵循“注释A”中所说的内容。注A说:Thoseentriesmarked‘‘(NoteA)’’shouldhaveconstantcomplexity.但是,这并不意味着这些条目应该具有恒定的复杂性。标准使用非常具体的术语,“应该”意味着它不是强制性的。