根据thegccdocs,memcmp不是GCC的内在函数。如果您想在gcc下加速glibc的memcmp,则需要使用文档中定义的较低级别的内在函数。但是,在网上搜索时,似乎很多人都认为memcmp是一个内置函数。是否适用于某些编译器而不适用于其他编译器? 最佳答案 请注意,repzcmpsb例程可能不会比glibc的memcmp快。事实上,在我的测试中,它从来没有更快,即使只比较几个字节。见http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
根据thegccdocs,memcmp不是GCC的内在函数。如果您想在gcc下加速glibc的memcmp,则需要使用文档中定义的较低级别的内在函数。但是,在网上搜索时,似乎很多人都认为memcmp是一个内置函数。是否适用于某些编译器而不适用于其他编译器? 最佳答案 请注意,repzcmpsb例程可能不会比glibc的memcmp快。事实上,在我的测试中,它从来没有更快,即使只比较几个字节。见http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43052
我正在编写一些具有高级接口(interface)的低级代码,并且觉得需要比较运算符来对普通旧数据类型(如FILETIME结构)进行单元测试,但由于C++甚至不提供成员比较,所以我写了这个:templatestd::enable_if_t::value,bool>operator==(constType&a,constType&b){returnstd::memcmp(&a,&b,sizeof(Type))==0;}所以我的问题是,这是一个好方法还是有一些隐藏的恶魔会在以后的开发周期中给我带来麻烦,但它现在有点工作。 最佳答案 C++
我正在编写一些具有高级接口(interface)的低级代码,并且觉得需要比较运算符来对普通旧数据类型(如FILETIME结构)进行单元测试,但由于C++甚至不提供成员比较,所以我写了这个:templatestd::enable_if_t::value,bool>operator==(constType&a,constType&b){returnstd::memcmp(&a,&b,sizeof(Type))==0;}所以我的问题是,这是一个好方法还是有一些隐藏的恶魔会在以后的开发周期中给我带来麻烦,但它现在有点工作。 最佳答案 C++
特别是,以下是明确定义的,还是表现出未定义的行为?memcmp(0,0,0);这在C和C++之间有区别吗?理想情况下,请提供标准的报价。 最佳答案 Inparticular,isthefollowingwell-defined,ordoesitexhibitundefinedbehavior?未定义。C997.21.1/2介绍了所有字符串函数:Unlessexplicitlystatedotherwiseinthedescriptionofaparticularfunctioninthissubclause,pointerargum
特别是,以下是明确定义的,还是表现出未定义的行为?memcmp(0,0,0);这在C和C++之间有区别吗?理想情况下,请提供标准的报价。 最佳答案 Inparticular,isthefollowingwell-defined,ordoesitexhibitundefinedbehavior?未定义。C997.21.1/2介绍了所有字符串函数:Unlessexplicitlystatedotherwiseinthedescriptionofaparticularfunctioninthissubclause,pointerargum
memcmp()函数用于:比较两个内存块函数介绍函数声明:intmemcmp(constvoid*ptr1,constvoid*ptr2,size_tnum);参数:ptr1:指向内存块的指针。ptr2:指向内存块的指针。数字:要比较的字节数。返回值:在两个内存块中不匹配的第一个字节在 ptr1 中的值低于在ptr2 中的值(如果计算为无符号char 值)0:两个内存块的内容相等>0:在两个内存块中不匹配的第一个字节在 ptr1 中的值大于在ptr2 中的值(如果计算为无符号字符值)头 文 件:#include用法示例/*memcmpexample*/#include#includeintma
前提条件:考虑这样一个类或结构T,对于两个对象a和b类型Tmemcmp(&a,&b,sizeof(T))==0产生相同的结果a.member1==b.member1&&a.member2==b.member2&&...(memberN是T的非静态成员变量)。问题:什么时候应该memcmp用于比较a和b为了平等,什么时候应该链接==可以使用吗?这是一个简单的例子:structvector{intx,y;};重载运算符==为vector,有两种可能性(如果它们保证给出相同的结果):booloperator==(vectorlhs,vectorrhs){returnlhs.x==rhs.x&
前提条件:考虑这样一个类或结构T,对于两个对象a和b类型Tmemcmp(&a,&b,sizeof(T))==0产生相同的结果a.member1==b.member1&&a.member2==b.member2&&...(memberN是T的非静态成员变量)。问题:什么时候应该memcmp用于比较a和b为了平等,什么时候应该链接==可以使用吗?这是一个简单的例子:structvector{intx,y;};重载运算符==为vector,有两种可能性(如果它们保证给出相同的结果):booloperator==(vectorlhs,vectorrhs){returnlhs.x==rhs.x&
考虑:constexprchars1[]="a";constexprchars2[]="abc";std::memcmp(s1,s2,3);如果memcmp在它看到的第一个差异处停止,它不会读取超过s1的第二个字节(nul终止符),但是我在C标准中没有看到任何东西来证实这一点行为,而且我不知道C++中有任何扩展它的东西。n15707.24.4.1PDFlinkintmemcmp(constvoid*s1,constvoid*s2,size_tn);Thememcmpfunctioncomparesthefirstncharactersoftheobjectpointedtobys1to