Questions tagged «null-pointer»



2
什么时候在空实例上调用成员函数会导致未定义的行为?
考虑以下代码: #include <iostream> struct foo { // (a): void bar() { std::cout << "gman was here" << std::endl; } // (b): void baz() { x = 5; } int x; }; int main() { foo* f = 0; f->bar(); // (a) f->baz(); // (b) } 我们预期(b)会崩溃,因为xnull指针没有对应的成员。实际上,(a)不会崩溃,因为this从未使用过指针。 因为(b)取消引用this指针((*this).x = 5;),并且this为null,所以程序将输入未定义的行为,因为始终将取消引用null视为未定义的行为。 会(a)导致不确定的行为吗?如果两个函数(和x)都是静态的怎么办?


1
Rust的Option类型的开销是多少?
在Rust中,引用永远不能为null,因此在实际需要null(例如链表)的情况下,请使用以下Option类型: struct Element { value: i32, next: Option<Box<Element>>, } 与简单指针相比,就内存分配和取消引用的步骤而言,这涉及多少开销?在编译器/运行时中,是否有一些“魔术”可以使Option成本降低,或者比Option使用非核心库使用相同的enum构造自己实现或通过将指针包装在向量中实现成本更低?


1
C ++ nullptr实现如何工作?
我很好奇如何nullptr运作。标准N4659和N4849说: 它必须有类型std::nullptr_t; 您不能使用其地址; 它可以直接转换为指针和指向成员的指针; sizeof(std::nullptr_t) == sizeof(void*); 其转换bool为false; 可以将其值转换为与相同的整数类型(void*)0,但不能向后转换; 因此,它基本上是一个常量,其含义与相同(void*)0,但类型不同。我std::nullptr_t在设备上找到的实现,如下所示。 #ifdef _LIBCPP_HAS_NO_NULLPTR _LIBCPP_BEGIN_NAMESPACE_STD struct _LIBCPP_TEMPLATE_VIS nullptr_t { void* __lx; struct __nat {int __for_bool_;}; _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t() : __lx(0) {} _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t(int __nat::*) : __lx(0) {} _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR operator int __nat::*() const {return 0;} template <class _Tp> _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR operator …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.