string-comparison-functions
全部标签 为了方便使用,我想编写类似于sprintf的格式化函数,只返回std::string,如下所示:std::stringformat_string(constchar*format,...)我可以在那里使用vsnprintf但有问题-我事先不知道临时缓冲区应该有多长。Microsoft上有函数_vscprintf可以做到这一点,但我认为它不可移植?一个选项是让临时缓冲区开始一些已知的大小,然后如果发现它不够用vsnprintf增加它。有更好的方法吗?谢谢附言请在没有提升的情况下给出答案。我知道Boost,但我很好奇如何在没有Boost的情况下实现它。 最佳答案
我在使用GCC4.5的MacOSX10.6.6下遇到静态boost库(来自MacPorts的Boost1.45.0-2,编译为fat/universal(x86/x86_64)库)的一些非常奇怪的问题。错误信息是main(78485)malloc:***errorforobject0x1000e0b20:pointerbeingfreedwasnotallocated***setabreakpointinmalloc_error_breaktodebug[1]78485abort(coredumped)还有一小段会触发这个问题的示例代码:#defineBOOST_FILESYSTEM_
我在使用英特尔编译器中的lambda函数时遇到问题,特别是以下代码无法编译:templatestd::functionmake_func(Tx){return[=](intindex)->T{returnx;};}我得到的错误是error:namespace"std"hasnomember"function"代码在我的Mac上编译和运行良好(macportsgcc版本4.5)。错误在起作用,我们使用的是Intel编译器版本11.1。它确实接受lambda函数(使用-std=c++0x选项),例如:autolam=[=](intj)->int{printf("testingforlamb
我有:intfoo(intx){returnx+1;}structBar{decltype(foo)operator();};intmain(){Barbar;printf("%d\n",bar(6));}这会导致稍微令人吃惊的编译器错误消息(g++4.6.1):error:declarationof'operator()'asnon-function将成员名称更改为decltype(foo)blubb;使用它会导致链接器错误:undefinedreferenceto`Bar::blubb(int)'这是预期的行为吗? 最佳答案 您
将字符串转换为数组的推荐方法是什么?我正在寻找类似的东西:templatestd::arrayto_array(constV&v){assert(v.size()==N);std::arrayd;std::copy(v.begin(),v.end(),d.data());returnd;}C++11或Boost是否提供类似的东西?其他人如何做到这一点?每次我在项目中需要时都必须自己复制/粘贴这个函数,这似乎很愚蠢。 最佳答案 这看起来不错。C++11中没有这样的东西,我认为Boost中也没有。如果你不想把它到处粘贴,你可以把它放在一
以下代码在VS2012中无法编译classZot{public:intA(){return123;}};int_tmain(intargc,_TCHAR*argv[]){std::functionfn=&Zot::A;return0;}但是,将分配更改为std::functionfn=std::bind(&Zot::A,std::placeholders::_1);有效。有很多在线示例显示了原始语法。C++11规范是否更改了某些内容以禁止使用此语法?作业是否有有效的缩写形式?编辑:编译器错误(针对可恢复性略微编辑)是:1>vc\include\functional(515):error
为什么max_size不是std::string的静态成员?这可以编译,但我觉得奇怪的是所有字符串共有的属性只能通过字符串的实例访问:std::size_tmax_size=std::string().max_size();为什么会这样实现? 最佳答案 Whyisn'tmax_sizeastaticmemberofstd::string?因为max_size返回值取决于字符串实例内部使用的分配器实例。 关于c++-std::string::max_size()作为静态成员,我们在Stac
我不明白为什么这不起作用(VisualC++2012):#include#include#include#includeusingnamespacestd;intmain(){pair>("^",boost::assign::list_of("rules"));}错误是:include\utility(138):errorC2668:'std::vector::vector':ambiguouscalltooverloadedfunctionwith[_Ty=std::string]include\vector(786):couldbe'std::vector::vector(std:
我试图调试我的小词法分析器并遇到了这个问题:QtCreator-Debugger不显示我的std::string-variable的任何内容。我尝试在控制台中对其进行调试,但得到了相同的结果,只是简单的结构信息。我前几天用的那个版本的QtCreator确实显示了字符串的内容。所有其他STL元素,如std::vector、std::map、std::multimap等显示正确的数据,只是std::string类不正确。经过几个小时的谷歌搜索后,我发现了很多描述pretty-print创建的网页,我解决这个问题的非常笨拙的方法并没有帮助。我有什么想法可以摆脱这个错误吗?注意:字符串变量的“
从UsingSFINAEtocheckforglobaloperator收集信息和templates,decltypeandnon-classtypes,我得到了以下代码:http://ideone.com/sEQc87基本上,我将两个问题的代码结合起来,如果它有ostream声明,则调用print函数,否则调用to_string方法。摘自问题1namespacehas_insertion_operator_impl{typedefcharno;typedefcharyes[2];structany_t{templateany_t(Tconst&);};nooperatorstruct