相关疑难解决方法(0)

指针与参考

在给函数提供原始变量时,最好的做法是:

unsigned long x = 4;

void func1(unsigned long& val) {
     val = 5;            
}
func1(x);
Run Code Online (Sandbox Code Playgroud)

要么:

void func2(unsigned long* val) {
     *val = 5;
}
func2(&x);
Run Code Online (Sandbox Code Playgroud)

IOW:有没有理由选择一个而不是另一个?

c++ variables pointers reference

249
推荐指数
7
解决办法
11万
查看次数

对C++中的指针使用NULL或0(零)吗?

在C++的早期,当它被用螺栓固定在C之上时,你不能使用NULL,因为它被定义为(void*)0.你不能将NULL分配给除了之外的任何指针void*,这使得它变得毫无用处.在那些日子里,人们接受了你使用0(零)空指针.

直到今天,我继续使用零作为空指针,但我周围的人坚持使用NULL.我个人认为给NULL现有值一个name()没有任何好处- 因为我也喜欢将指针测试为真值:

if (p && !q)
  do_something();
Run Code Online (Sandbox Code Playgroud)

然后使用零更有意义(如果你使用NULL,你不能逻辑使用p && !q- 你需要明确比较NULL,除非你假设NULL是零,在这种情况下为什么使用NULL).

有没有客观的理由偏好零而不是NULL(反之亦然),或者只是个人偏好?

编辑:我应该添加(并且最初要说)使用RAII和异常,我很少使用零/ NULL指针,但有时你确实需要它们.

c++ null

186
推荐指数
13
解决办法
13万
查看次数

NULL vs nullptr(为什么它被替换?)

我知道在C++中0x或者NULLnullptr基于指针的应用程序所取代.我只是好奇他们为什么要更换它?

在处理指针时,在什么情况下使用nullptr过度NULL有益?

c++ null pointers nullptr

176
推荐指数
4
解决办法
14万
查看次数

为什么不调用nullptr NULL?

在C++ 11中,nullptr关键字被添加为更安全的类型指针常量,因为先前的通用定义NULL为0有一些问题.

为什么标准委员会选择不调用新的空指针NULL,或者声明NULL应该是#defined nullptr

c++ language-design c++11

67
推荐指数
4
解决办法
5343
查看次数

我们如何检查指针是否为NULL指针?

我一直认为只会if(p != NULL){..}做这项工作.但在阅读Stack Overflow问题后,似乎没有.

那么在吸收了那个说明NULL指针可能具有非零值的问题的所有讨论之后检查NULL指针的规范方法是什么?

c null-pointer

42
推荐指数
5
解决办法
13万
查看次数

什么时候NULL宏不是0?

我隐约记得几年前读过这篇文章,但我在网上找不到任何参考.

你能给我一个NULL宏没有扩展到0的例子吗?

编辑清晰:今天,它扩展为((void *)0),(0)(0L).但是,有些架构早已被遗忘,而这种情况并非如此,并且NULL扩展到了不同的地址.就像是

#ifdef UNIVAC
     #define NULL (0xffff)
#endif
Run Code Online (Sandbox Code Playgroud)

我正在寻找这样一台机器的例子.

更新以解决问题:

我不是在现行标准的背景下提出这个问题,也不是用不正确的术语来扰乱人们.但是,我接受的答案证实了我的假设:

后来的模型使用了[blah],显然是对所有现存的写得不好的C代码的反应,这些代码做出了错误的假设.

有关当前标准中的空指针的讨论,请参阅此问题.

c macros null history

33
推荐指数
2
解决办法
1万
查看次数

为什么"bool c = nullptr;" 编译(C++ 11)?

我不明白为什么下面的代码编译

int main()
{
     //int a = nullptr;  // Doesn't Compile
     //char b = nullptr; // Doesn't Compile
       bool c = nullptr; // Compiles

       return 0;
}
Run Code Online (Sandbox Code Playgroud)

而评论部分没有.


我已经经历了这个这个.

这两个boolnullptr是关键字,那么什么是关于其他数据类型的独特之处?

c++ pointers null-pointer c++11

27
推荐指数
3
解决办法
5209
查看次数

C++三等于?

我需要能够区分NULL0使用c ++.

有没有办法使用像===运算符这样的东西(比如JavaScript中的标识运算符)来区分 c ++ NULL0c ++ 之间的区别?

c++

22
推荐指数
4
解决办法
1万
查看次数

C#null coalescing运算符等效于c ++

C#null合并运算符是否有C++等价物?我在代码中进行了太多的空检查.所以正在寻找一种减少空代码量的方法.

c# c++ null null-coalescing-operator

21
推荐指数
3
解决办法
9796
查看次数

为什么nullptr不能转换为int?

总结:nullptr转换为bool,bool转换为int,为什么不nullptr转换为int

这段代码没问题:

void f(bool);
f(nullptr);      // fine, nullptr converts to bool
Run Code Online (Sandbox Code Playgroud)

这没关系:

bool b;
int i(b);        // fine, bool converts to int
Run Code Online (Sandbox Code Playgroud)

那么为什么这不行呢?

void f(int);
f(nullptr);      // why not convert nullptr to bool, then bool to int?
Run Code Online (Sandbox Code Playgroud)

c++ nullptr implicit-conversion c++11

16
推荐指数
2
解决办法
6432
查看次数