草庐IT

c++ - c++ std_lib_facilities.h 还在用吗?

我正在通过BjarneStroustrup的《编程:原则与实践》学习C++。他们给出了一个示例程序://readandwriteafirstname#include"std_lib_facilities.h"intmain(){cout>first_name;//readcharactersintofirst_namecout当我在visualstudio中键入相同的代码时,头文件“std_lib_facilities.h”出现错误。我很困惑用这个头文件。还在用吗?除了这个header,我还可以使用什么? 最佳答案 在本书的附录(具

c++ - 何时更喜欢 const 左值引用而不是右值引用模板

目前正在阅读cpr请求库的代码库:https://github.com/whoshuu/cpr/blob/master/include/cpr/api.h注意到这个库的接口(interface)经常使用完美转发。只是学习右值引用,所以这对我来说都是相对较新的。根据我的理解,右值引用、模板化和转发的好处是被环绕的函数调用将通过右值引用而不是值来获取其参数。这避免了不必要的复制。它还可以防止由于引用推导而不得不生成一堆重载。然而,根据我的理解,const左值引用本质上做同样的事情。它避免了重载的需要,并通过引用传递所有内容。需要注意的是,如果被环绕的函数采用非常量引用,它将无法编译。但是,

c++ - 使用 std::initializer_list 构造函数而不产生歧义?

我有一个类叫做Shape,它可以从任何可迭代对象和一个名为Array的类中初始化,其中只包含一个Shape.但是,当我尝试初始化Array时,我遇到了无法解释的编译错误。:classShape{public:templateShape(Iteratorfirst,Iteratorlast):m_shape(first,last){}templateShape(constIterable&shape):Shape(shape.begin(),shape.end()){}templateShape(std::initializer_listshape):Shape(shape.begin(

c++ - std::memcpy 或显式 char 值赋值 - 在 C++ 中相等且合法

在下面的示例中,uint32_t的值表示被复制到uint8_t数组。这是由std::memcpy完成的。据我了解C++标准,这是完全合法的:我们通过转换为unsignedchar*的T*访问类型为T的对象。没有别名问题,没有对齐问题。反之则不太明显。我们正在通过unsignedchar*访问T的对象表示,这是合法的。但是访问这个词包括改变吗?当然没有锯齿和对齐问题。然而,如果缓冲区s中的值来自外部来源,则会出现问题:我们必须确保正确的字节顺序并省略陷阱表示。可以检查正确的字节顺序,这样就可以解决。但是陷阱表示呢?我们怎样才能避免这种情况?或者uint类型没有陷阱表示而不是说double

c++ - 为什么没有 std::string_view 的模板构造函数?

我正在阅读documentationforstd::string_view,我注意到这些是构造函数:constexprbasic_string_view()noexcept;constexprbasic_string_view(constbasic_string_view&other)noexcept=default;constexprbasic_string_view(constCharT*s,size_typecount);constexprbasic_string_view(constCharT*s);他们为什么不介绍这个?templateconstexprbasic_strin

c++ - 在哪里使用 std::move 来处理字符串?

我正在读这个post.我找到了以下代码。我在想:std::move对字符串有用吗(假设字符串足够长)?它是否使之前的字符串无效?我应该在什么地方使用它,在什么地方不应该使用它?.className{public:Name(std::stringfirstName,std::stringlastName):firstName_(std::move(firstName)),lastName_(std::move(lastName)){}voidprint()const{std::cout我的技术一直在使用constructor(conststd::string&argument):fiel

C++ std::stringstream 操作优化

我的情况如下:我有一个二进制文件,我正在使用std::fstream读取操作作为(char*)读取我的目标是从文件中取出每个字节,将其格式化为十六进制,然后将其附加到一个字符串变量中字符串变量应包含按照第2项格式化的文件的全部内容。例如,假设我有以下二进制文件内容:D0469857A0249956A3我格式化每个字节的方式如下:stringstreamfin;;for(size_ti=0;i(fileb[i]);}//thiswouldyieldtheoutput"D0469857A0249956A3"returnfin.str();上述方法按预期工作,但是,据我所知,它对于大文件来说

c++ - 递归生成给定子集大小的所有组合 (C++)

观察下面的代码:#include#include#includetemplatevoidprint_2d_vector(std::vector>&v){for(inti=0;istructpermcomb2{std::vector>end_set;std::vector*data;permcomb2(std::vector¶m):data(¶m){}voidhelpfunc(std::vector&seen,intdepth){if(depth==0){end_set.push_back(seen);}else{for(inti=0;istd::vector>permt

c++ - 指针和 std::string - 奇怪的行为 - C++

我提前道歉,因为我在之前的帖子中问过同样的问题,但正如有人正确指出的那样,我没有发布真正的代码。因此,我再次问同样的问题,试图比以前更清楚。作为练习,我正在创建一个操作字符串的程序。特别是,我想删除包含在2个“*”之间的部分字符串。我必须强调,我已经使用库字符串的函数成功地创建了相同的程序;事实上,问题涉及使用char指针对给定字符串的操作。我将发布完整的代码并进行深入讨论。#include#includeusingnamespacestd;intmain(){stringfrase;getline(cin,frase);//Takesasinputthephraseintsize=f

c++ - 解压函数调用的参数数组

是否可以将一个函数及其参数列表传递给另一个函数并稍后从内部调用它?voidtestA(int,float,char*){}voidtestB(int,float,double){}voidtestC(MyClass,float,double){}templatevoidapplyA(void(*foo)(void*),std::initializer_listargs){foo(/*unpackargssomehow*/);}templatevoidapplyB(void(*foo)(void*),std::initializer_listargs){MyClasscls;foo(cl