草庐IT

shared_int

全部标签

c++ - 哪些库对 std::make_shared 使用了 "We Know Where You Live"优化?

两年前,StephanT.Lavavejdescribedaspace-savingoptimization他在Microsoft的std::make_shared实现中实现了这一点,我从与他的交谈中了解到,Microsoft并不反对采用此优化的其他库实现。如果您确定其他库(例如,用于GnuC++、Clang、IntelC++以及Boost(用于boost::make_shared))是否采用了此实现,请提供答案。我还没有准备好访问那么多make_shared实现,我也不想深入研究那些我必须看看他们是否已经实现了WKWYL优化的东西,但我希望SO读者知道一些图书馆的答案。通过查看代码,

c++,数组索引需要是int吗?

在c++中,const数组arr包含0到80之间的100个数字。如果我将arr中的数字选择为char,它们是否会在每次用作索引时隐式转换为int双指针,即doublepointer[arr[i]]? 最佳答案 是的,它们将被转换为int类型。根据C++标准,“下标运算符[]的解释方式使得E1[E2]与*((E1)+(E2))相同。”如果使用加法运算符,那么“通常的算术转换是为算术或枚举类型的操作数。”这意味着当它们在表达式中用作下标运算符的索引时,char类型的对象将被转换为int类型的对象。请注意,根据您将选择的或默认设置的编译器

c++ - 使用 shared_ptr<void> 初始化结构

我一直遇到一个错误nomatchingconstructorforinitializationof'std::shared_ptr'这是有道理的,但我不知道从哪里开始。这是我正在使用的。#includestructContainer{inttype;std::shared_ptrpayload;Container(intt,constvoid*p):type(t),payload(p){}};intmain(){return0;}我正在尝试使用shared_ptr制作一个通用容器类型为void.我打算对类型进行切换,然后将有效负载转换为适当的类型。我想我可以做类似Containerct

c++ - 当输入 char 代替 int 时避免无限循环

我正在做一个银行系统项目,需要确保每个输入都是有效的(程序必须是健壮的)。如果输入无效,则用户必须重新输入。但是当我有一个int类型的变量并且用户输入char类型时,一个无限循环开始了。例如:inti;cin>>i;如果用户输入char无限循环开始。我怎样才能避免它并再次要求用户输入?谢谢 最佳答案 无限循环的原因:cin进入失败状态,这使得它忽略对它的进一步调用,直到错误标志和缓冲区被重置。cin.clear();cin.ignore(100,'\n');//100-->askscintodiscard100charactersf

c++ - 在计算过程中将 int 类型转换为 long long 有什么好处?

我通过以下函数得到了错误的答案。vectorrepeatedNumber(constvector&A){intn=A.size();longlonglinear_sum=0,square_sum=0;inti=0;for(;ians;ans.push_back((linear_sum+square_sum)/2);ans.push_back((-linear_sum+square_sum)/2);returnans;}但是当我将LINE1和LINE2替换为:linear_sum+=(longlong)A[i];square_sum+=(longlong)A[i]*(longlong)A

c++ - 有没有办法将 "inherit"设为 int 等基类型?

我有几个与此类似的结构:structTime64{int64_tMilliseconds;Time64operator+(constTime64&right){returnTime64(Milliseconds+right.Milliseconds);}...blahblahallthearithmeticoperatorsforcalculatingwithTime64andint64_twhichisassumedtorepresentmillisecondsstd::stringParse(){fancytextoutput}}现在我需要添加更多它们。本质上它们只是对任何基类的解

c++ - "warning C4800: ' int' : forcing value to bool 'true' or 'false' "不同场景下的不同行为

我无法理解此警告的以下行为。case1:boolread=(33&3);//NoWarningissuedbyvs2013case2:intb=33;boolread=(b&3);//NowcompilerisgeneratingC4800warning.为什么编译器在情况2中生成警告,而在情况1中不发出任何警告。 最佳答案 C4800是一个性能警告-在运行时将整数强制转换为bool会产生成本。这与逻辑正确性无关。最常见的强制转换(和警告)发生在您与使用整数(VC++中的BOOL)作为bool值的代码交互时。第一个代码段中的编译时强

c++ - 异常 : bad_weak_ptr while shared_from_this

当我这样做时出现异常:std::bad_weak_ptr->shared_from_this()templateclasspainter_record_t{.......private:std::shared_ptr_owner;}这里我想在构造函数中设置“问题”对象:templateclassstream_record_t:publicpainter_record_t{public:stream_record_t(std::shared_ptrowner):painter_record_t(owner){//...}}我有基类:classi_painter_t{public:virt

c++ - 如何让 Visual C++ 警告将 int 静默转换为字符串?

如何让编译器(vc14)对此发出警告?我明白为什么会这样(int默默地转换为char,然后转换为string,因为它有一个char构造函数)。但它是错误的来源,它不止一次地咬了我。有什么可以做的吗?inti=1;std::strings;s=i;//"\x1" 最佳答案 使用警告级别4(/W4),如果可能,您应该真正对所有代码使用它。warningC4244:'argument':conversionfrom'int'to'char',possiblelossofdata由于各种原因,VisualC++仍默认为警告级别3。事实上,对

c++ - 当 wordCount 中不存在键时,我应该对 unordered_map<string, int> 使用++wordCount[key] 吗?

见下面的代码:unordered_mapwordCount;for(stringword:words)++wordCount[word];问题:当wordCount中不存在word时,是否可以使用++wordCount[word];?我总是看到有人这样使用,但我不太确定。说明here说:Ifkdoesnotmatchthekeyofanyelementinthecontainer,thefunctioninsertsanewelementwiththatkeyandreturnsareferencetoitsmappedvalue.Noticethatthisalwaysincreas