草庐IT

-std=gnu99

全部标签

c++ - 如何从 LPCTSTR 转换为 std::string?

我有一个LPCTSTR并想调用一个带有std::string参数的函数。我需要做什么转换? 最佳答案 冰山一角LPCTSTR可以是单字节或多字节字符串(取决于编译期间是否定义了UNICODE常量),而std::string的用户(包括您的函数)通常使用它来保存单字节字符串。您需要进行两次转换:一次用于LPCSTR(非UNICODE构建),一次用于LPCWSTR(UNICODE构建)。第一个很简单:std::stringconvert(LPCSTRstr){returnstd::string(str);}第二个需要先用WideChar

c++ - std::map 和 std::pair 的问题

我想执行一个小程序来测试一些东西#include#includeusingnamespacestd;struct_pos{floatxi;floatxf;booloperatorxim;struct_posk1={0,10};struct_posk2={10,15};struct_valv1={5.5};struct_valv2={12.3};m.insert(std::pair(k1,v1));m.insert(std::pair(k2,v2));return0;}问题是当我尝试编译它时,出现以下错误$g++m2.cpp-omtestInfileincludedfrom/usr/in

c++ - 如果没有 if,std::count_if 会更快吗?

这是gccstd::count_if代码templatetypenameiterator_traits::difference_typecount_if(_InputIterator__first,_InputIterator__last,_Predicate__pred){[snip]typenameiterator_traits::difference_type__n=0;for(;__first!=__last;++__first)if(__pred(*__first))++__n;return__n;}我的问题:使用它会更好(即更快)吗__n+=__pred(*__first)

c++ - std::cout 是否有返回值?

我很好奇std::cout是否有返回值,因为当我这样做时:cout打印了一些十六进制代码。这个打印出来的值是什么意思? 最佳答案 因为cout的操作数是用户定义的类型,表达式实际上是一个函数调用。编译器必须找到最好的operator匹配操作数,在本例中都是std::ostream类型.有许多候选运算符重载可供选择,但我将只描述按照通常的重载解析过程最终被选中的那个。std::ostream有一个转换运算符,允许转换为void*.这用于启用测试流的状态作为bool条件(即,它允许if(cout)工作)。右手操作数表达式cout隐式转换

c++ - 使用连续无符号整数列表初始化 std::vector<unsigned int>

我想用一种特殊的方法来初始化一个std::vector这在我用作引用的C++书籍中有所描述(如果重要的话,UlrichBreymann的德语书籍'DerC++Programmer')。在那本书中有一个关于STL序列类型的部分,特别提到了list,vector和deque.在本节中,他写道,这种序列类型有两个特殊的构造函数,即如果X指的是这样一种类型,X(n,t)//createsasequencewithncopiesoftX(i,j)//createsasequencefromtheelementsoftheinterval[i,j)我想在unsignedint的间隔内使用第二个,即

c++ - g++ 6.1 可能的 std::forward 回归 - 错误或预期行为?

g++6.1最近被引入到ArchLinux的测试库中,我的一些使用g++5.3.0成功编译的代码不再编译。我做了一个最小的例子:gcc.godbolt.orglink//Thiscodecompileswithg++5.3.0//Thisdoesnotcompilewithg++6.1#include#include#include#defineFWD(...)::std::forward(__VA_ARGS__)structsinker{templatevoidsink(T&){}};templatevoidcaller(T&v,TF&&f){sinkers;f(s,v);}temp

c++ - 在可见性有限的 `std::terminate` 函数中调用 `noexcept` - gcc vs clang codegen

考虑以下代码片段:voidf();voida(){f();}voidb()noexcept{f();}在上面的场景中,f的主体对于当前翻译单元中的编译器是不可见的。因此,由于b被标记为noexcept,必须在调用方生成额外的代码以确保异常被捕获并且std::terminate被调用。这就是clang++-Ofast-std=c++2a所做的(主干版本):a():#@a()jmpf()#TAILCALLb():#@b()pushraxcallf()popraxretmovrdi,raxcall__clang_call_terminate__clang_call_terminate:#@_

c++ - 捕获并修改 std::exception 和子类,重新抛出相同类型

我想这样做:try{//...}catch(conststd::exception&ex){//shouldpreserveex'runtimetypethrowtype_in_question(std::string("Custommessage:")+ex.what());}是否有可能无需为每个子类型编写单独的处理程序? 最佳答案 您正在寻找的可能是这样的:try{//...}templatecatch(Excconst&ex){throwExc(std::string("Custommessage:")+ex.what());

C++ 跨边界使用 std::vector

这个问题在这里已经有了答案:HowdoIsafelypassobjects,especiallySTLobjects,toandfromaDLL?(4个答案)PassingreferencetoSTLvectoroverdllboundary(7个答案)关闭7年前。假设EXE和DLL使用相同的编译器和STL版本。如果我在我的EXE中使用std::vector并使用reserve来保留内存。然后我将它作为对DLL的引用传递。我在DLL中执行了一个push_back以将一个元素添加到我的vector中。如果我没有超过实际容量,新元素的内存是分配在DLL中还是在EXE中?

c++ - 使用 std::launder 从指向非事件对象的指针获取指向事件对象成员的指针?

这个问题跟在这个one之后让我们考虑这个示例代码:structsso{union{struct{char*ptr;charsize_r[8];}large_str;charshort_str[16];};boolis_short_str()const{return*std::launder(short_str+15)=='\0';//UB?}};如果short_str不是事件成员,则在没有std::launder的情况下取消引用指针将是UB。让我们考虑一下ABI已明确指定,并且我们知道size_r[7]与short_str[15]位于同一地址。当short_str不是union体的活跃