草庐IT

标准ACL

全部标签

c++ - std::string::replace 标准实现?

在我能想到的每一种语言中,除了C++,函数Replace本质上是替换字符串的所有部分,而C++的字符串类不支持像下面这样的简单操作:strings="HelloWorld";s=s.Replace("Hello","Goodbye");echos;//Prints"GoodbyeWorld"这似乎是任何类型的字符串替换函数的最常见用法,但在C++中似乎没有标准的替换函数。我在这里遗漏了什么吗?编辑:我知道标准库中没有像这样的内置替换函数——我想知道是否有或多或少的标准实现是由标准算法或类似的东西制成的。 最佳答案 你没有遗漏任何东西

c++ - C++(旧/新标准)中最大的数字原始数据类型是什么

我对旧/新有点困惑,所以这是我的问题。新旧C++标准中最大的原始数值数据类型是什么?(整数和float)问候并提前致谢糟糕 最佳答案 在1998年的标准中,longint和unsignedlongint是至少与标准的任何其他整数类型一样大的类型(§3.9.1/2-3).(它们可能是也可能不是“最大”类型。例如,longint可能与int大小相同。就此而言,char的大小也可以相同。)浮点longdouble提供的精度至少与其他两种浮点类型(§3.9.1/8)一样多。在C++0x标准草案(n3092)中,类型为longlongint和

c++ - 基于没有 Boost 的标准模板库的 TimerCallback 函数

是否有使用STL实现的TimerCallback库。我无法将Boost依赖项引入我的项目。定时器到期时应该能够回调注册的函数。 最佳答案 标准库中没有特定的计时器,但很容易实现一个:#includetemplatevoidtimer(Durationconst&d,Functionconst&f){std::thread([d,f](){std::this_thread::sleep_for(d);f();}).detach();}使用示例:#include#includevoidhello(){std::cout请注意该函数是在另

c++ - C++11标准有没有全新的序列化和反射库?

最近,boost序列化对C++11标准库中的内容进行改进并非不可能。同时,我的项目需要序列化和反射库。我四处寻找,没有找到任何东西。因此我想知道是否有现成的(嗯......它必须是全新的才能与C++11兼容,而不是老化的MFC)或关于制作我自己的任何基本、实用和明确的指导.据我所知,基本原理是使用STANDARD中的那些助手来推断类型,已经在没有std命名空间的boost序列化中被采用。这对您来说可能就像从鸡蛋中挑出鹅卵石一样微不足道,但我就是无法让自己对boost感到满意。 最佳答案 要真正回答这个问题,尽管有点晚了:现在有cer

c++ - C++11标准中这条语句的含义是什么?

从C++11标准的段落§5.2.2/1中提取的这句话中的粗体字符是什么意思?Therearetwokindsoffunctioncall:ordinaryfunctioncallandmemberfunction(9.3)call.Afunctioncallisapostfixexpressionfollowedbyparenthesescontainingapossiblyempty,comma-separatedlistofexpressionswhichconstitutetheargumentstothefunction.Foranordinaryfunctioncall,th

c++ - 选择什么标准容器(如果有)?

我需要一些内存管理,希望我可以将其基于一些std容器。我的要求是:元素只有一个默认构造函数(没有复制,没有移动,没有别的)容器可以通过一小块连续的元素扩展(在后面)我什至可以粗略地知道我总共需要多少元素,甚至可以随时知道最终需要多少元素。不过,这些都是估计值。我真的不需要迭代器,但获取元素运行编号的方法会很方便。所以,我需要一些可以通过添加block来扩展的东西,比如std::deque.但是用std::deque,我不能保证扩展,比如说,8个元素,给我一个连续的block。和std::deque没有capacity所以我不能从std::deque中“适应”.这意味着我必须自己编写,对

c++ - 删除右值,保留左值引用(标准类型特征可用?)

我正在尝试编写一个函数,以std::tuple的形式返回可变参数包的子集。理想情况下,该函数应该没有运行时开销(没有不必要的拷贝),并且它应该允许用户访问lvalue引用并修改它们。应维护值类型、lvalue引用和constlvalue引用。临时对象(rvalue引用)应“转换”为值类型以避免创建无效引用(对临时对象的引用)。期望结果示例:intlr=5;constint&clr=lr;autot=make_subpack_tuple(lr,clr,5);static_assert(is_same>{},"");//Ok,modifieslr:std::get(t)=10;//Comp

c++ - 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str':非标准语法;使用 '&' 创建指向成员的指针

我正在尝试创建一个可以读取和编译opengl顶点和片段着色器文件的函数,但是我收到了这个错误:'std::basic_string,std::allocator>::c_str':non-standardsyntax;use'&'tocreateapointertomember我不太确定如何修复它。这是我的代码:GLuintshader_load(constGLchar*vertex,constGLchar*fragment){std::stringver=file_read_all(vertex);std::stringfrag=file_read_all(fragment);con

c++ - std::move 是否与左值引用一起使用? std::move 如何在标准容器上工作?

#includestructA{inta[100];};voidfoo(constA&a){std::vectorvA;vA.push_back(std::move(a));//howdoesmovereallyhappen?}intmain(){Aa;foo(a);}上面的代码编译正常。现在到处都写着move避免复制。以下是我的查询:move在处理左值时真的有效吗[非]-const引用?即使有“右值引用”,对象复制时如何避免复制像上面一样插入标准容器中?例如voidfoo(A&&a){//supposeweinvokethisversionstd::vectorvA;vA.push_

c++ - 大型嵌入式公司真的是 "forced"使用旧的编程标准/编译器吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion我们的讲师告诉我们,在完成作业时,我们只能使用C++98/C99标准,通过为编译器指定正确的标志,我们可以确保我们不会违反此规则。我知道这是为了让人们可以学习“真正的”C或C++,无论他们选择哪个,并在没有任何新语言功能帮助的情况下练习这种技能(我不同意,但我有什么资格争辩)。当问我的讲师为什么这条规则时,他回答(在知道我对上述答案不满意之后):“因为像ASML这样与嵌入式设备一起工作的大