c – 编译时“strlen()”有效吗?
发布时间:2020-12-16 05:34:21 所属栏目:百科 来源:网络整理
导读:有时需要将字符串的长度与常量进行比较. 例如: if ( line.length() 2 ){ // Do something...} 但是我试图避免在代码中使用“魔术”常量. 通常我使用这样的代码: if ( line.length() strlen("[]") ){ // Do something...} 由于函数调用,它更可读,但效率不高
有时需要将字符串的长度与常量进行比较.
例如: if ( line.length() > 2 ) { // Do something... } 但是我试图避免在代码中使用“魔术”常量. if ( line.length() > strlen("[]") ) { // Do something... } 由于函数调用,它更可读,但效率不高. template<size_t N> size_t _lenof(const char (&)[N]) { return N - 1; } template<size_t N> size_t _lenof(const wchar_t (&)[N]) { return N - 1; } // Using: if ( line.length() > _lenof("[]") ) { // Do something... } 在发布版本(VisualStudio 2008)中,它生成了相当不错的代码: cmp dword ptr [esp+27Ch],2 jbe 011D7FA5 好的是,编译器不会在二进制输出中包含“[]”字符串. 它是编译器特定的优化还是常见的行为? 解决方法
内联函数调用的功能是编译器特定的优化和常见行为.也就是说,许多编译器可以做到这一点,但是它们不是必需的.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |