19得票5回答
我可以获取数组最后一个元素之后的地址吗?

可能是重复的问题: 通过下标取一个超出数组边界的元素的地址:按照C++标准是否合法? int array[10]; int* a = array + 10; // well-defined int* b = &array[10]; // not sure... ...

8得票1回答
通过“function” lvalue 调用“noexcept函数”是否未定义行为?

[expr.call]/6: 通过表达式调用一个函数,如果该表达式的函数类型与被调用函数定义的函数类型不同,则会导致未定义的行为。 void f() noexcept {}; // function type is "noexcept function" void (*pf)() = f;...

7得票3回答
C中的序列点和副作用

在这个 C-FAQ 中,它提到了 序列点; 标准规定;在前一个和下一个序列点之间,通过表达式对对象进行的存储值修改最多一次。此外,先前的值只能被访问以确定要存储的值。 在示例中。 i = i++; a[i] = i++; 从声明的第一句话可以清楚地看出,这些示例是导致未定义行为的结果...

7得票1回答
更改接口而无需重新编译实现类

我有以下几个类: public abstract interface X { public abstract void f() throws java.io.IOException; } public class Y implements X { public voi...

27得票2回答
使用GCC未定义行为检测器

今天我读了一篇关于GCC未定义行为检测器(ubsan)的文章。然而,当我按照那里的步骤操作(将-fsanitize=undefined添加到我的代码中),编译器(Ubuntu 15.04上的GCC 4.9.2)说某些引用未定义:||=== Build: Debug in Project (co...

22得票2回答
初始化列表中出现多个变异是否属于未定义行为?

我对初始化列表和序列点很好奇。我之前读到过初始化列表中的评估顺序是从左到右的。如果确实如此,那么在评估点之间必须存在某种序列点,我错了吗?因此,根据上述内容,以下代码是否有效?是否存在任何导致未定义行为的内容?int i = 0; struct S { S(...) {} ...

14得票3回答
为什么rvalue unique_ptr的operator*会返回一个lvalue?

使用“死亡”的unique_ptr的operator*的返回值是不好的。以下代码可以编译,但当然会导致未定义行为:auto& ref = *std::make_unique<int>(7); std::cout << ref << std::endl...

7得票2回答
将指针转换为引用后使用reinterpret_cast是否属于未定义行为?

以下代码是否存在未定义行为(UB)? int i = 5; void *p = &i; int* &r = reinterpret_cast<int* &>(p); int* p2 = r; 请注意我不对指针进行解引用。

10得票5回答
使用悬空指针进行解引用操作是否属于未定义行为?

我找不到标准中说明这个程序未定义的地方:#include <iostream> int main() { int *p; { int n = 45; p = &n; } std::cout <<...

7得票4回答
使用强制类型转换进行指针算术运算的错误用法

我有一个结构体数组,并且我有一个指向其中一个结构体成员的指针。我想知道哪个元素包含了这个成员。以下是两种方法: #include <array> #include <string> struct xyz { float x, y; std::stri...