草庐IT

null-propagation-operator

全部标签

C++ allocator<X>::deallocate(NULL,1) 允许吗?

free(NULL)和::operatordelete(NULL)都是允许的。分配器概念(例如std::allocator是否也允许deallocate(NULL,1),或者是否需要自己保护它? 最佳答案 您需要添加自己的支票。根据§20.4.1.1/8,deallocate要求:pshallbeapointervalueobtainedfromallocate().nshallequalthevaluepassedasthefirstargumenttotheinvocationofallocatewhichreturnedp.a

c++ - 迭代器模式 - 错误 C2679 : binary '<<' : no operator found which takes a right-hand operand of type 'std::string'

这个问题在这里已经有了答案:errorC2679:binary'(1个回答)关闭5年前。我正在尝试使用迭代器模式进行迭代和打印,但出现错误这里是错误:errorC2679:binary'couldbe'std::basic_ostream&std::operator>(std::basic_ostream&,constchar*)'这是错误的来源std::coutgetName();#ifndef_ROBOT1_#define_ROBOT1_namespaceguitars{namespaceComposite{namespaceInventoryParts{usingnamespac

c++ - ‘operator=’ 的模糊重载与 c++11 std::move and copy and swap idiom

我收到以下错误:[matt~]g++-std=c++11main.cpp-DCOPY_AND_SWAP&&./a.outmain.cpp:Infunction‘intmain(int,constchar*const*)’:main.cpp:101:24:error:ambiguousoverloadfor‘operator=’in‘move=std::move((*©))’main.cpp:101:24:note:candidatesare:main.cpp:39:7:note:Test&Test::operator=(Test)main.cpp:52:7:note:Test&

c++ - 在 c++ 中使用 operator 关键字在这里意味着什么?

这适用于用C++编写的应用程序。在什么情况下这一行对你们有意义,在struct定义的上下文中(stream是FILE*类型的成员变量>):operatorFILE*(){returnstream;}我一直在使用调试器,试图理解它,但我似乎无法激活那行代码。我从未以这种方式遇到过operatoroverload关键字。这行代码能做什么? 最佳答案 这是一个implicitconversionoperator.隐式转换运算符允许一个不会以其他方式隐式转换为目标类型的类型,这样做的能力。它们具有以下语法,其中Foo是要隐式转换的对象的类,

c++ - Delphi 中 C++ NULL 的等效常量是什么?

我需要将我的C++代码迁移到Delphi。在C++代码中有许多检查来检查给定句柄​​(HANDLE)是否为NULL。可以在Delphi中使用的等效常量是什么?Delphi中的null似乎与C++中的NULL不同。 最佳答案 在WindowsC++头文件中,NULL是一个扩展为0的宏.这意味着NULL可以在数字和指针上下文中使用,因为C++语言支持这种用法。但是,对于Delphi,值0用于数字上下文,值nil在指针上下文中使用。WindowsHANDLE值在Delphi中声明为数字类型,因此代替C++NULL你应该使用0在德尔福。

c++ - 为什么命名空间中的函数看不到我全局定义的 operator<<?

我定义了一个operatorstd::pair的输出函数实例,供某些单元测试使用,如果它们不符合预期,则希望打印值。我的测试代码也有对作为另一个类的成员持有,该类有自己的operator。—特别是boost::optional,但为了示例,我定义了一个简单的Container在这里上课。问题是operator对于std::pair值似乎在operator中不可见容器类。#include#includetemplatestd::ostream&operatorconst&pair){returnoutstructContainer{Tvalue;};templatestd::ostrea

c++ - C++ 中 NULL 是如何定义的?

在C中,NULL通常是#defined为0或((void*)0).我希望这在C++中是相似的,并且关于堆栈溢出的许多答案似乎也表明情况也是如此。但是,当我尝试编译以下程序时:#includevoidf(intx){printf("void*\n");}voidf(void*x){printf("int\n");}intmain(void){f(0);//intf((void*)0);//void*f(nullptr);//void*f(NULL);//whyisthisambiguous?return0;}我的编译器告诉我f(NULL)是不明确的。具体来说,我的编译器说:sample.

c++ - 你应该为类格式化 operator<< 吗?

如,operator>>是否应该与operator匹配数据库示例:如果运算符(operator)>>读取以下格式的内容:2Joe500201Bob250300运算符(operator)Record:1/2Name:JoeBalance:500Transactions:20PremiumAccount:Yes然后有一个单独的writeFile()函数?我知道两者都行,但“可接受的标准”是什么? 最佳答案 如果你有一个istreamoperator>>重载以特定格式读取数据的类型,然后如果您实现ostreamoperator相同类型的重

c++ - C++ 中的成员函数模板和重载 operator()

以下代码片段适用于我:classFoo{public:templateT&get(){...}};Foofoo;foo.get()=...;但是,以下代码片段对我不起作用:classFoo{public:templateT&operator()(){...}};Foofoo;foo()=...;错误是:expectedprimary-expressionbefore'>'tokenexpectedprimaryexpressionbefore')'token这两个错误都涉及foo()为什么这不起作用,是否可以解决这个问题? 最佳答案

c++ - std::shared_ptr operator [] 等效访问

在C++17中,std::shared_ptr有一个运算符[]以允许索引基于vector的指针(http://en.cppreference.com/w/cpp/memory/shared_ptr/operator_at)如果这样的运算符不可用,我如何获得类似的访问,我仍然想对元素数组使用智能指针,例如:std::shared_ptrdata;data.reset(newunsignedchar[10]>;//usedata[3]; 最佳答案 像这样:data.get()[3]但是,请记住Nathan在评论中所说的话。std::sh