草庐IT

null-character

全部标签

有了NULL,为什么C++还需要nullptr?

在C++编程中,nullptr是一个类型安全的空指针常量,自C++11起被引入。然而,在此之前,程序员们通常使用NULL或0来表示空指针。那么,为什么有了NULL之后,C++还需要引入nullptr呢?本文将从类型安全、函数重载和代码清晰性三个方面来探讨这个问题。一、类型安全在C++中,NULL通常被定义为整数类型的零(0)或一个空指针常量。这种定义方式在某些情况下可能会导致类型混淆,因为NULL可以被隐式地转换为任何指针类型,也可以被转换为整数类型。这种隐式转换有时会导致意外的错误和难以调试的问题。相比之下,nullptr是一个指针类型的空常量,只能被隐式地转换为其他指针类型或布尔类型。这种

c++ - 为什么下面的runner指针没有变为null?

为什么runner指针没有改成null?Node*runner=head->next;Node*reversedList=head;reversedList->next=nullptr;但在下面,它确实变为nullNode*reversedList=head;reversedList->next=nullptr;Node*runner=head->next; 最佳答案 在你发出下面的声明之后Node*runner=head->next;'runner'指向由'next'指向的地址内存(假设它是地址0x6543)。(head->nex

c++ - 当内存可用时,realloc() 返回 NULL

我有一个c++程序在具有12GB内存的Windows7机器上运行。编译器和链接器是VisualStudio2013Express。该程序使用OGDF库。我将库源代码编译成具有ReleaseX64配置的静态库,并在我的项目中引用了该库。当我运行问题(调试x64配置)时,OGDF库中的代码抛出异常,指示没有足够的可用内存;E*p=static_cast(realloc(m_pStart,sNew*sizeof(E)));if(p==0)OGDF_THROW(InsufficientMemoryException);我暂停程序并打开调试窗口并检查了sNew=9M和sizeof(E)=8的值,

c++ - NULL指针转换

C++03$4.10-"Theconversionofanullpointerconstanttoapointertocv-qualifiedtypeisasingleconversion,andnotthesequenceofapointerconversionfollowedbyaqualificationconversion(4.4)."这是我的理解intmain(){charbuf[]="Hello";charconst*p1=buf;//2stepconversionprocess//C1:char[6]tochar*//C2:char*tocharconst*(qualif

c++ - SDL 2.0 -> 传递了一个 NULL 互斥体

当我使用SDL2.0编译一个简单示例时,在命令SDL_CreateWindow之后,出现以下错误:“传递了一个NULL互斥量”。我正在使用静态库项目。我也在OSX10.8.3上进行测试。此通知在命令行编译时遗漏了什么?下面是生成程序的命令行和代码示例。编译器:clang++-I"TestSDL/sdl/include"-Wall-c-xc++-archx86_64-std=c++11-stdlib=libc++-MMD-MP-MF"src/main.d"-MT"src/main.d"-o"src/main.o""../src/main.cpp"链接器:clang++-L"TestSDL

c++ - Boost Spirit Qi Symbols默认值和NULL值

BoostSpiritqi::symbols实现了一个键值对映射:给一个字符串的键,它可以返回某个值。我的问题是:1)对于一个空字符串,是否可以返回一个默认值?(代码中的Q1)2)对于非空字符串或键值对映射中列出的键,是否可以返回一个值表示该键无效?(代码中的Q2)**以下代码基于BOOSTSPIRIT文档。**在此先感谢您的任何建议。#include#include#include#include#include#include#include#include#includetemplatevoidtest_parser_attr(charconst*input,Pconst&p,T

c++ - 有条件地使初始化列表中的 shared_ptr 为 null

我处于这样一种情况,我需要使shared_ptr为null或包含类Bar的实例。下面的方法不起作用,因为Bar和nullptr不是同一类型。怎样才能做到这一点?classBar{};classFoo{private:shared_ptrb;public:Foo():b(true?Bar():nullptr){}}; 最佳答案 b(true?std::make_shared():nullptr) 关于c++-有条件地使初始化列表中的shared_ptr为null,我们在StackOverf

c++ - (WMI) ExecMethod 输出参数 - 无论调用结果如何,ResultingSnapshot 都是 NULL,为什么?

我正在使用WMI创建RCT检查点。下面是代码片段。问题是当我使用ExecMethod调用方法CreateSnapshot时,检查点被创建但ResultingSnapshot仍然指向NULL.由于调用是异步的(因为pOutParameters的返回值是4096)我也在WaitForJobCompletion中等待作业完成,但是pOutParameters未更新,ResultingSnapshot仍为NULL。基本上,我需要这个ResultingSnapshot来创建引用点。如果有任何其他方法可以做到这一点,我可以写出来,但需要指导。我是WMI的新手,感谢任何帮助或领导。HRESULThr

c++ - "null logger"- 是否会使用 ostream 运算符的空类从优化代码中编译出什么都不做?

如果我有一个在Release模式下为空的日志记录类,并且有一个什么都不做的ostream运算符。它或多或少看起来像这样:structnull_logger{templateinlinenull_logger&operator我创建了一个简单的测试并将生成的程序集粘贴到下面:constchar*foo(){return"hello";}intmain(){inti=0;null_logger()老实说,我并不完全理解汇编。根据@Als的建议,我寻找了call语句,但没有找到。因此可以安全地假设,在Release模式下,将编译出对该ostream运算符的任何调用吗?这是生成的程序集,使用g

c++ - 子对象(看似)随机设置为 NULL 或 'illegal object' ;如何调试?

我将Cocos2d-x用于我从Cocos2d-iphone移植的游戏。最初的程序员似乎使用了Objective-C的“特性”来避免在调用nil对象时崩溃,以此来做很多草率的事情。如果这与我不知道的相关,但是,在我的代码中,我从不手动调用release(),当然也不会删除或类似的东西。我什至根本不调用->removeObject()(尽管这不会导致与我遇到的问题相同)。现在的问题是:当游戏运行时,在随机时刻(它们不会是随机的,但它们现在显然是随机的)子节点被设置为NULL。这不仅会影响我的代码,还会影响Cocos2d的内部结构。示例:CCLog("----------------");f