7得票3回答
可以假设NULL常量就是零吗?

《理解和使用C指针》一书中,Richard Reese提到: “null”是一个抽象的概念,由空指针常量所支持。这个常量可以是零或非零值。C程序员不需要关心它们的内部表示。 我的问题是,既然“这个常量可以是零或非零值”,那么在我的代码中做以下操作是否安全? int *ptr = NULL...

21得票2回答
C++中的nullptr如何实现?

我很好奇如何使用 nullptr。标准 N4659 和 N4849 规定: 它必须具有类型 std::nullptr_t; 您不能获取其地址; 它可以直接转换为指针和成员指针; sizeof(std::nullptr_t) == sizeof(void*); 将其转换为 bool 的结果是...

130得票2回答
当通过空指针调用成员函数时,会导致未定义行为的情况是什么时候发生?

考虑以下代码:#include <iostream> struct foo { // (a): void bar() { std::cout << "gman was here" << std::endl; } // (b): ...

10得票2回答
为什么std::string不接受空指针?

我最近向std::string构造函数传递了一个空指针,导致出现了未定义的行为。我确信在我之前有成千上万的程序员也犯过同样的错误,这个bug毫无疑问已经导致了无数程序的崩溃。当从使用char*的代码转换为使用std::string的代码时,这种情况经常发生,而且这种问题不可能在编译时捕获,在运...

95得票3回答
执行memcpy(0,0,0)是否保证安全?

我对C标准不是很熟悉,请见谅。 我想知道是否有保证,按照标准,memcpy(0,0,0)是安全的。 我找到的唯一限制是如果内存区域重叠,则行为是未定义的... 但是我们可以认为这里的内存区域重叠吗?

109得票1回答
Rust的Option类型的开销是什么?

在 Rust 中,引用永远不可能是 null。所以在实际需要 null 的情况下,例如链表,需要使用 Option 类型: 在 Rust 中,引用永远不可能是 null。所以在实际需要 null 的情况下,例如链表,需要使用 Option 类型:struct Element { v...

13得票5回答
通过取消引用一个空指针来分配一个引用

int& fun() { int * temp = NULL; return *temp; } 在上述方法中,我试图对空指针进行解引用。当我调用此函数时,它不会抛出异常。我发现当返回类型为引用时,如果返回类型为值,则不会抛出异常。即使将空指针的解引用分配给引用(如下行...

8得票1回答
强制允许取消引用空指针

我有一个非常老旧(而且庞大)的Win32项目,它使用了大量的NULL指针检查,通过将解引用的指针强制转换为指针来实现。像这样: int* x = NULL; //somewhere //... code if (NULL == &(*(int*)x) //somewhere else...

15得票3回答
在 C++ 中,不对 sizeof 应用的表达式进行评估是否意味着可以在 sizeof 中取消引用空指针或无效指针吗?

首先,我看到了关于C99的这个问题,并且被接受的答案引用了C99标准草案中的“操作数未计算”措辞。我不确定这个答案适用于C++03。还有一个关于C++的问题,其被接受的答案引用了类似的措辞,并且还包括“在某些情况下,未计算的操作数会出现。未计算的操作数未被计算。”的措辞。 我有这段代码: i...

38得票4回答
调用未初始化的对象(空指针)上的方法

如果在Objective-C中调用一个空对象(指针),会有什么正常的行为?它不应该产生某种错误(如分段错误,空指针异常……)吗? 如果这是正常行为,是否有一种方法可以更改此行为(通过配置编译器),以便程序在运行时引发某种错误/异常? 为了使我的意思更清楚,这里有一个例子。 有这个类: ...