草庐IT

null-propagation-operator

全部标签

c++ - 使用通用模板函数为 std::ostream 和 std::vector 专门化 operator<< 的最佳方法?

我遇到了标准指定的两阶段查找问题,并且由clang(正确地)实现了与operator的过载有关的问题。对于std::ostream和std::vector.考虑一个非常通用的模板函数,该函数将其参数转换为流(仅在递归时真正有用,但简单的示例足以触发问题)://generic.htemplatevoidshift(Stream&s,Arg&arg){s这个generic.h可以在整个项目中使用。然后在其他文件中,我们要输出std::vector,所以我们定义了一个重载//vector.h#include#includestd::ostream&operatorconst&v){for(a

c++ - C++11 std::string::operator[] 会返回空终止缓冲区吗

我有一个std::string类的对象,我需要将其传递给C函数,该函数通过迭代它并搜索操作char*缓冲区空终止符。所以,我有这样的东西://Cfunctionvoidfoo(char*buf);//C++codestd::stringstr("str");foo(&str[0]);假设我们使用C++11,那么我们可以保证std::string表示具有连续存储的字符。但我想知道是否有任何保证&str[0]将指向以\0结尾的缓冲区?是的,有c_str成员函数,但我说的是operator[]。有人可以引用标准吗? 最佳答案 在实践中,是

c++ - Operator = 在 C++ 中使用 Const 变量重载

我想知道你们是否可以帮助我。这是我的.h:ClassDoctor{conststringname;public:Doctor();Doctor(stringname);Doctor&Doctor::operator=(constDoctor&doc);}和我的主要:intmain(){Doctord1=Doctor("peter");Doctord2=Doctor();d2=d1;}我想执行operator=函数。谁能帮我?注意Doctor上的const成员。************编辑:*********我的主要问题是我希望另一个类具有一个Doctor属性,就像Pacient有一个D

c++ - NULL == 指针

这个问题在这里已经有了答案:Isthereadifferencebetweeni==0and0==i?(8个答案)关闭9年前。在C++中,我们通常会检查一个指针是否为空,我只知道我们应该使用if(NULL==ptr)代替:if(ptr==NULL)我想知道为什么?另外,如果我们想将一个ptr初始化为null,我们应该使用ptr=NULL还是ptr=0?是的,我知道在C++中,我们通常使用ptr=nullptr,我想知道为什么我们这样做只是为了统一代码?谢谢

c++ - 对 null 对象的函数调用返回的 bool 值

在C++中对空对象进行函数调用时返回的bool值是什么?ClassDummy*dummy=NULL;if(!dummy->dummy_function(1,2,3)){//DoSomething}根据C++11标准,这不应该返回错误吗? 最佳答案 除非dummy已在命名空间范围内声明,否则它未初始化且其值未指定,即它可能为null也可能不为null。在nullptr或指向无效内存的指针上调用成员函数是未定义的行为。你可能getawaywiththecorrectresult如果您调用的成员函数不访问该类的任何其他数据成员;换句话说,

c++ - 显式 operator= call (T::operator=)

我正在阅读qt源代码,我已经多次看到这样的代码:buttonOpt.QStyleOption::operator=(*opt);所以,我猜它类似于buttonOpt=*opt但为什么他们使用这种语法而不是默认和用户友好的语法?这是更快还是存在任何其他利润? 最佳答案 这是因为它们显式地从buttonOpt的基类调用operator=,即QStyleOption。buttonOpt.QStyleOption::operator=(*opt);//similarbehaviorclassBase{public:virtualboolop

c++ - std::stringstream 如何处理 operator<< 中的 wchar_t*?

鉴于以下代码段无法编译:std::stringstreamss;ss我也不认为这个会:std::stringstreamss;ss但确实如此(至少在VC++上)。我猜这是由于以下ostream::operator过载:ostream&operator如果我不小心混合了字符类型,这是否有可能悄悄地破坏我的代码? 最佳答案 是的-您需要wstringstream用于wchar_t输出。您可以通过不使用字符串文字来缓解这种情况。如您所述,如果您尝试将constwstring&传递给stringstream,它将无法编译。

c++ - new 的内存是否必须来自 operator new?

在考虑类似的事情时autox=newT;标准是否强制要求内存必须来自operatornew——类特定的还是全局的?也就是说,如果缺少特定于类的operatornew,则没有办法从除全局operatornew之外的任何地方获取内存? 最佳答案 我认为你的理解方式是错误的。表达式newT总是由两个步骤组成:搜索合适的operatornew。如果一个存在于类T中,则采用那个,否则采用全局的。全局的总是存在的,因为这是标准规定的(所以你永远不能“定义”它(因为它已经被定义),但你可以替换它)。你可以说::newT总是无条件地选择全局oper

c++ - 如何创建 NULL/空 DACL?

我需要向所有人授予我正在创建的命名管道的访问权限。我知道这样做的方法是创建一个NULL/空DACL并将其传递给CreateNamedPipe。如何创建NULLDACL?有人告诉我,这与为LPSECURITY_ATTRIBUTES传递NULL指针不同。 最佳答案 像这样:SECURITY_DESCRIPTORSD;InitializeSecurityDescriptor(&SD,SECURITY_DESCRIPTOR_REVISION);SetSecurityDescriptorDacl(&SD,TRUE,NULL,FALSE);为了

c++ - string::operator+= 问题

我试图在一个字符串中追加两个字母,但似乎字符串没有改变:voidfun(){stringstr;str+='a'+'b';cout查看了STL的源码,找到了operator+=的实现,但还是不知道为什么。basic_string&operator+=(_CharT__c){this->push_back(__c);return*this;} 最佳答案 通过添加'a'+'b',您会将2个字符加在一起形成另一个字符。然后使用+=将其添加到字符串中。此代码将执行您想要的操作:std::stringstr;(str+='a')+='b';s