草庐IT

const-string

全部标签

使用 shared_ptr 到 const T 的 C++ 模板实例化

假设我有一个类templateclassA{public:templatevoidf(std::tr1::shared_ptr>v1,std::tr1::shared_ptr>v2){}};以下不编译:Aa;std::tr1::shared_ptr>v1(newstd::vector());std::tr1::shared_ptr>v2(newstd::vector());a.f(v1,v2);编译错误是:error:nomatchingfunctionforcallto'A,std::allocator>>::f(std::tr1::shared_ptr>>&,std::tr1::s

c++ - solaris (x86) 上std::basic_string 的一些疑惑

solaris(x86)上std::basic_string的一些困惑#include#includeintmain(){constwchar_t*s=L"abcdef";std::wstringws(s,s+6);for(inti=0;i运行结果为:9799101000为什么不是979899100101102代码#include#includeintmain(){constwchar_t*s=L"abcdef";std::wstringws;ws.resize(6);for(inti=0;i可以得到预期的结果。我使用gcc3.4.6,构建命令是g++-fshort-wcharstri

c++ - 为什么我的重载模板函数以不同于非模板函数的方式提升为 const。

我有一个可以正常工作的重载函数。(示例中的f)。当我将它转换为同一事物的模板版本时,它总是调用T&版本而中断,从不调用T*。(示例中的t)当我制作模板函数的非常量版本时,它按预期工作。(示例中的t2)这发生在VS2010和g++4.6.2中。对const规则的提升是否不同,或者这是某种错误。#includeusingnamespacestd;intf(constint&x){return1;}intf(constint*x){return2;}templateintt(constT&x){return3;}templateintt(constT*x){return4;}template

c++ - insert in string的效率

我正在尝试为比longlong更大的非常大的整数编写这个自定义加法类。我正在研究的一种方法是将整数保留为字符串,然后将字符转换为它们的int组件,然后添加每个“列”。我正在考虑的另一种方法是将字符串拆分为多个字符串,每个字符串都是longlong的大小,然后使用字符串流将其转换为longlong添加然后重新组合。无论如何,我发现加法最容易反向完成以允许结转数字这一事实。在这种情况下,我想知道字符串插入方法的效率。似乎因为一个字符串是一个字符数组,所以所有的字符都必须移动一个。所以它会有所不同,但效率似乎是O(n),其中n是字符串中的字符数。这是正确的,还是只是天真的解释?编辑:我现在对

c++ - 如何通过迭代器将 map<string, int> push_back 到 vector<map<string, int>> 中?

我目前正在学习AcceleratedC++(Koening/Moo)这本书,但我在其中一个练习中遇到了问题。任务是编写一个程序,将一些单词序列作为输入,然后将其存储在map中。.字符串是输入的单词和关联的int是每个单词出现的次数。然后,您必须根据单词出现的次数对单词进行排序;也就是说,按值而不是键。您不能按值对映射进行排序,因此我尝试将元素复制到vector中,我打算使用谓词对其进行排序。不幸的是,我得到的只是一个充满g++错误的屏幕。它们似乎源于同一个地方-将我的map的元素放入我的vector中,我尝试这样做:intmain(){mapcounters;cout>word)++c

c++ - 为什么按值返回对于非内置类型应该是 const 而对于内置类型不是 const?

上的解决方案4和5GotW#6Const-Correctness提及这一点:PointGetPoint(constinti){returnpoints_[i];}Return-by-valueshouldnormallybeconstfornon-builtinreturntypes..intGetNumPoints(){returnpoints_.size();}..sincetheintisalreadyanrvalueandtoputin'const'caninterferewithtemplateinstantiationandisconfusing,misleading,an

c++ - 向成员函数添加 const 限定符

我目前正在编写一个接口(interface)类,它应该提供对复杂结构的内部元素作为常量或非常量引用的访问。这个想法是一些模块被授予const访问权限,而一些模块被授予完全访问权限。我已经使用'type_traits''std::add_const'来有条件地限定内部成员函数的返回类型,不幸的是我想不出有条件地将成员函数限定为const或非const的方法。这可能吗?如果是这样怎么办?例如:templatestructapply_const{typedefTtype;};templatestructapply_const{typedeftypenamestd::add_const::ty

具有相同名称的 C++ const 和可变函数

考虑以下代码。#includeusingnamespacestd;classObject{public:Object(){}voidPrint()const{coutPrint();return0;}输出是constconstmutableconstmutable我想知道,当面对许多具有相同名称的可变方法时,C++如何决定调用哪个方法? 最佳答案 print_obj(obj1);print_obj(obj2);要调用的函数根据传递对象的cv-qualifier(const/volatile)求值。请注意,cv-qualifiers在

c++ - vector<shared_ptr<T>> 和 vector<shared_ptr<const T>> 之间的高效转换

我有一个类:classX{vector>v_;public:vector>getTs(){returnv_;}};它有一个vector的shared_ptr类型T.出于某种原因,它需要公开一个方法来返回这个vector。但是,我不想修改vector的内容,也不想指向对象。所以我需要返回一个vector的shared_ptr.我的问题是,有什么有效的方法可以做到这一点吗?如果我简单地返回它,它可以工作,但它需要重建一个vector,这有点昂贵。谢谢。 最佳答案 你不能直接这样做-但你可以在你的容器上定义“View”,让你做一些非常相似

c++ - 获取 const 左值引用的地址是否合法?

#includeintfoo(){return0;}intmain(){constint&a=foo();std::cout在这段代码中,a绑定(bind)到一个右值。取它的地址合法吗?(我的法律意思是:在代码中格式不正确?我是否导致了未定义的行为?) 最佳答案 这很好。在C++11中,您甚至可以这样做:int&&a=foo();a=123;您可以这样考虑临时对象(概念上和一般情况下):x=func();//translatedas:auto__temporary=func();x=__temporary;__destruct_va