如何在不调用未定义的行为的情况下检查一个值适合类型?
我希望检查 double 值是否可以表示为 int (或对于整数类型的任何一对浮点)。这是一种简单的方法: double x = ...; int i = x; // potentially unde…
从函数中返回布尔文字作为参考
我在尝试查找错误时遇到了此代码: int x = 10; // for example const bool& foo() { return x == 10; } int bar() { bool y = foo(); // error here …
ListNode的初始化
我有一个关于 ListNode 初始化的问题,如果我只是宣布一个 ListNode 指针,为什么我不能像代码中所示分配它的下一个值。 struct ListNode { int val; …
了解 UB 和指针算术
我有一个通用的引用计数堆分配包装类。所以我的类基本上只是一个指针: template class Refcounted { struct model { std::atomic count{1}; T value;…
当我在 C++ 中打印未初始化的变量时会发生什么?
为什么会打印 32767 (或其他一些随机数)?什么是 std::cout 打印?为什么它不是NULL(或0)? int main() { int a; std::cout << a; } …
关于 [expr.mptr.oper]/4 的问题
[expr.mptr.oper]/4指出: [..] 如果 E1 的动态类型不包含 E2 所属的成员 指的是,行为未定义[..]。 下面的代码是UB吗? struct B { int a{ 10 }; }; …
矢量越界访问:为什么会出现这种行为?
我知道使用 operator[] 在 C++ 中对 std::vector 进行越界访问会导致未定义的行为。因此,我不应该期望这样做会带来任何有意义的事情。然而,我很好奇…
尝试释放 C 中的内存时出现堆损坏错误
我有这段代码: #include #include int* create_arr(int start, int end) { int length = end - start, i = start, j; int* arr; arr = (int*)malloc(…
C - 使用 memset 设置未定义的 _Bool 后读取 _Bool 是否已定义,实现是否已定义?
在 ISO 标准 C 中,我的理解是,没有什么可以真正确定 _Bool 的表示形式,但它确实说: “_Bool 足够大,可以容纳值 0 和 1” “当任何标量值转换为 _…
对于非 void 函数没有 return 语句,其中控制永远不会结束,这是未定义的行为吗?
我正在使用此处列出的书籍学习 C++。特别是,我读到从非 void 函数末尾流出是未定义的行为。然后我看了这个答案,上面写着: 在 C++ 中,仅从值返回函…
C++将 new 放置到 NULL 中的不寻常用法
在 以下 C++98 语句中: multiThreadService[nextBuffer] = new (NULL) MultiThreadService(binder); 这样说是否正确: 这是“placement new”, 该对…
scanf 转换为指针
我有这样的代码: char *ps = "hello"; scanf("%s", ps); 我想写一个字符串,让我们假装“a”,到指针而不使用数组。尝试将字符串扫描到 ps 中会导致…