草庐IT

c++ - 是否保证初始化顺序

我正在使用类似于以下代码部分的内容来进行一些初始化。我知道p::i_的初始化是无序的。我相信h是有序的,所以我应该能够推断出它的初始化顺序。鉴于p的标题包含在h的定义之前,有没有保证p::i_将在h之前初始化?structhelper{templatehelper(constT&,inti){p::i_::push_back(i);}};statichelperh;类p定义如下。templatestructp{staticstd::vectori_;};templatestd::vectorp::i_; 最佳答案 具有静态存储持续时

c++ - 为什么 "dynamic exception"保证会导致开销?

在C++11中,这已被弃用:voidfoo()throw();并替换为voidfoo()noexcept;在thisarticle据解释,这样做的原因(除其他外,归结为同一件事)是C++exceptionspecificationsarecheckedatruntimeratherthanatcompiletime,sotheyoffernoprogrammerguaranteesthatallexceptionshavebeenhandled.虽然这对我来说确实有意义,但我不明白为什么首先要动态检查throw(),或者为什么noexcept不提供异常保证除了调用std::termin

c++ - 我能保证不会被这种 ODR 违规行为所困扰吗?

我有一个头文件,它声明了一个带有静态变量的模板并定义了它:/*my_header.hpp*/#ifndefMY_HEADER_HPP_#defineMY_HEADER_HPP_#includetemplatestructfoo{staticintbar;staticvoiddump(){printf("%d\n",bar);}};templateintfoo::bar;#endif//MY_HEADER_HPP_此header包含在main.cpp和共享库mylib中。特别是,mylib_baz.hpp只包含此模板并声明一个修改模板特化的函数。/*mylib_baz.hpp*/#ifn

七种排序算法的C++实现(入门级、进阶级已更新完毕!)保证代码结果反复测试,可以一键运行,没有任何问题!

前言高铁上实在闲的没事干,所以就把这篇本来打算鸽掉的来开个头,咕咕咕~排序算法的重要性不言而喻,开玩笑,连你瓜程序设计考试都大概率考到(doge);建议先在1.0十大经典排序算法|菜鸟教程(runoob.com)上面对各种排序算法进行了解;本篇Blog包含七种排序算法:    1.快速排序;        2.插入排序;        3.选择排序;         4.冒泡排序;        5.堆排序;       6.归并排序;        7.基数排序;声明本篇Blog的排序代码基于C++,使用部分C++特性;对于需要C版本的,稍作修改就可以;难度分析入门级(学了程设怎么也得会):

c++ - 未命名对象的 RVO(返回值优化)是否是普遍保证的行为?

Thisquestion在不同方面(也仅限于gcc)。我的问题仅适用于未命名对象。ReturnValueOptimization被允许改变结果程序的可观察行为。标准中似乎也提到了这一点。但是,这个“允许”术语令人困惑。这是否意味着RVO保证在每个编译器上发生。由于RVO下面的代码改变了它的可观察行为:#includeintglobal=0;structA{A(int*p){}A(constA&obj){++global;}};Afoo(){returnA(0);}//这个程序是否应该为所有实现打印global=0,而不考虑编译器优化和foo的方法大小? 最佳

c++ - 是否保证在 std::string 之前初始化指向字符串文字的指针?

//file1.cppexternconstchar*foo;std::stringbar=foo;//file2.cppconstchar*foo="foo";标准保证bar被初始化为"foo"吗?或者它是否可以在foo被设置并在构造函数中出现段错误之前初始化,即SIOF的情况? 最佳答案 常量初始化保证首先发生(在这种情况下为foo)。所以Isbarguaranteedbythestandardtobeinitializedto"foo"?是的。Orcoulditbeinitializedbeforefoogetssetands

c++ - 如果 new_size 不大于旧的,C++ 标准是否保证 std::string::resize(new_size) 不会导致分配?

这个问题在这里已经有了答案:Doesthestandardguarantee,thatstd::string::resizewillnotdoreallocatememory,ifthenewsizeislessthanorequaltoastheoldone?(1个回答)关闭3年前。#include#includeintmain(){autos="hello"s;autop=&s[0];s.resize(3);assert('h'==*p);//alwaysok?}如果new_size不大于旧的,C++标准是否保证std::string::resize(new_size)不会导致分配

c++ - 是否有一种非间接、非 hack 的方法来保证 constexpr 函数只能在编译时调用?

目前,我们有两个主要的编译时评估选项:模板元编程(通常使用模板结构和/或变量)和constexpr操作1。templatestructsum_{enum{value=l+r};};//Withstruct.templateconstintsum=sum_::value;//Withstruct&var.templateconstintsub=l-r;//Withvar.constexprintmul(intl,intr){returnl*r;}//Withconstexpr.其中,我们保证所有四个都可以在编译时求值。templatestructCompileTimeEvaluable{

c++ - `std::mutex` 和 `std::lock` 是否保证处理器间代码中的内存同步?

我目前正在使用openMP编写在多核节点上运行的代码。openMP有一个特定的内存模型,保证在获取锁时在不同内核上运行的线程之间内存是同步的。我考虑使用C++11构造(std::threadwithstd::mutexandstd::lock)而不是openMP(因为它们更大的灵active)并想知道处理器之间的内存同步是否/如何在这里得到保证?如果没有,我该如何执行? 最佳答案 该标准在§30.4.1.2[thread.mutex.requirements.mutex]/6-25中对std::mutex的同步做出了以下保证Thee

c++ - RAII 不能真正保证防止资源泄漏,可以吗?

如果这个问题太愚蠢,请原谅我。使用RAII的最常见例子是:voidfunc(){//createsomeobjectpointerusinganysmartpointer//dosomeoperationthatmaythrowreturn;}//whethermethodreturnsfromthe*return*statementorbecauseofanyexceptionitisguaranteedthatthememorywillbereleasedThisarticle说(如果我理解正确的话),如果运行时系统知道没有异常处理程序可以在抛出异常后捕获异常,它可能跳过调用自动对