草庐IT

null-propagation-operator

全部标签

c++ - 通过 operator[] 访问静态成员 unordered_map

作为C++的新手,我遇到了一些我不太理解的行为,并且即使通过大量谷歌搜索也无法找到解释,所以我希望有人能解释这里到底出了什么问题。//test.h#includetypedefstd::unordered_maptest_type;classtest{public:staticconsttest_typetmap;};//test.cpp#include"test.h"consttest_typetest::tmap={{1,1}};//main.cpp#include"test.h"intmain(){//Attempt1:accesskeyviaoperator[]std::cou

c++ - 如果我将指针设置为 NULL,则两次释放同一指针不会出错

我尝试两次释放同一个指针,但都失败了,但如果我按照相同的步骤而不将其设为NULL,代码运行正常。#includestructMyClass{MyClass(){std::cout我看到问题的一个很好的答案WhathappenswhenyoudeallocateapointertwiceormoreinC++?但是如果我将它设为NULL,是什么让它运行,这两种情况不应该遵循相同的行为? 最佳答案 你只需要释放你分配的东西。您使用new[]分配了五个MyClass实例。所以这就是您需要解除分配的内容。您没有释放任何指针。指针不需要被释放

c++ - operator[] for std::map 什么情况下可以返回0?

我正在使用LLVM,但我遇到了以下我没有编写的代码段的问题:staticstd::mapNamedValues;...//LotsofothercodeValue*V=NamedValues["Demostring"];returnV?V:ErrorV("VisnotinNamedValuesmap.");根据我对std::map的理解,它永远不应该返回空指针(除非它内存不足?),所以我很难理解V为0如何表示V不在映射中。照原样,我的程序总是在这里出错,但我不明白为什么。对这里发生的事情有什么帮助吗? 最佳答案 std::map::

c++ - 调用 handle 为 NULL 的 CloseHandle(handle) 是否安全

删除NULL指针是安全的。int*p=NULL;deletep;//ok,secure句柄是什么?HANDLEh=NULL;CloseHandle(h);//allowed?我正在阅读MSDN但仍然不确定。它说了一些关于ERROR_INVALID_HANDLE的内容,但它是6L,而不是NULL。我来自一个类的析构函数,它给我一个C6387警告Errorif(m_hThread)WaitForSingleObject(m_hThread,INFINITE);CloseHandle(m_hThread);//warninigC6387m_hThread=NULL;

c++ - 重载 operator= 中断 std::sort

可能是个骗子,但我找不到。在用双节棍敲打我的键盘两天后,我发现重载等号运算符(operator=)显然会破坏std::sort。也许我错误地重载了operator=?这是我的MCVE:#include#include#include#include#include#includestructPerson{std::stringname;uint32_tage;booloperatorage&people){std::coutpeople={{"james",12},{"jada",4},{"max",44},{"bart",7}};PrintPeople(people);std::so

c++ - CWnd::CreateDlgIndirect 离开 m_hWnd==NULL

我正在处理的对话框未显示,使用:CWnd::CreateDlgIndirect(LPCDLGTEMPLATElpDialogTemplate,CWnd*pParentWnd,HINSTANCEhInst)对CreateDlgIndirect的调用是在lon-used基类中进行的,它有效地获取了资源文件中对话框模板的IDD-它适用于许多其他对话框,但我看不出我的对话框有什么不同。当以更正常的方式创建时,我的对话框工作正常,但我必须使用基类,因为它内置了许多其他功能。我在dlgcore.cpp中搜索CWnd::CreateDlgIndirect时发现,普通的Win32API调用失败了:hW

c++ - NULL 终止字符串及其长度

我有一个遗留代码,它接收一些专有代码,解析它并创建一堆静态字符数组(嵌入在表示消息的类中)来表示NULL字符串。然后指向字符串的指针被四处传递并最终序列化到某个缓冲区。分析表明str*()方法需要很多时间。因此我想使用memcpy()是否可能。为了实现它,我需要一种方法将长度与指向NULL终止字符串的指针相关联。我想:使用std::string看起来效率较低,因为它需要内存分配和线程同步。我可以使用std::pair.但在这种情况下,我需要“手动”保持长度。你怎么看? 最佳答案 使用std::string

C++ 为两个 double 重载 operator%

是否可以为两个double重载operator%?constdoubleoperator%(constdouble&lhs,constdouble&rhs){returnfmod(lhs,rhs);}当然,这会产生错误,因为两个参数之一必须具有类类型。所以我考虑利用C++隐式构造函数调用的可能性来解决这个问题。我是通过以下方式做到的:classMyDouble{public:MyDouble(doubleval):val_(val){}~MyDouble(){}doubleval()const{returnval_;}private:doubleval_;};constdoubleop

javascript - Null 是类型对象,所以它是真的吗?幕后发生了什么?

我在我的书“优雅的JavaScript”中读到,null==true的计算结果为false。使用解释器,我已确认这是TRUE。然而,在本章的后面——事实上,在同一页上——它说当null作为if、while或for语句的条件时,它将被转换为bool值并返回false。谁能有更深入的了解,告诉我这是为什么?我知道在哪里可以找到浏览器源代码,但我不确定如何定位负责这种奇特和不直观行为的编程。因为我对C++知之甚少,所以我也很感激任何有关独立查找此类信息的提示。谢谢。 最佳答案 一个重要的区别是null的Type是Null.(忽略typeo

c++ - 是否可以在 C++ 中声明 operator= private 并同时由编译器合成

我对运算符=很满意,它由编译器自动合成。但我希望它是私有(private)的,并且不想用类型的页面长定义来膨胀我的代码Foo&Foo::operator=(constFoo&foo){if(this==&foo)return*this;member1_=foo.member1_;member2_=foo.member2_;member3_=foo.member2_;...member1000_=foo.member1000_;return*this;}请问有什么办法吗? 最佳答案 在C++11中是:classFoo{Foo&oper