我编写了一个简单的多线程程序,如下所示:static bool finished = false; int func() { size_t i = 0; while (!finished) ++i; return i; } int main() { ...
在这个最近的问题的评论中,出现了一个有趣的讨论:虽然那里使用的语言是C,但讨论已经转向了C++标准,在使用像std::memcpy这样的函数访问多维数组元素时,什么构成了未定义行为。 首先,这是来自那个问题的代码,转换为C ++并尽可能使用const:#include <iostream...
如《初始化是否涉及lvalue到rvalue转换? int x = x;是否UB?》中所述,C++标准在第3.3.2节声明点中有一个令人惊讶的示例,在其中使用未确定的值初始化了一个int: int x = 12; { int x = x; } 根据Johannes的回答,这个问题的答案表明它...
int i = i; int main() { int a = a; return 0; } int a = a 肯定具有未定义行为(UB),更多细节可以在 Is reading an uninitialized value always an undefined behaviou...
我有一个 int x。为简化起见,假设 int 占用的范围为 -2^31 到 2^31-1。我想计算 2*x-1。我允许 x 为任何值,满足 0 <= x <= 2^30。如果我计算 2*(2^30),就会发生整数溢出。 一种解决方案是计算 2*(x-1)+1。这里比我想要的多了...
最近我看到了一篇Rust和C的比较文章,其中使用了以下代码: bool f(int* a, const int* b) { *a = 2; int ret = *b; *a = 3; return ret != 0; } 在Rust中(相同的代码,但使用Rust语法),它...
我今天在课堂上参加了一场考试,内容是阅读C代码和输入,并要求回答程序实际运行时屏幕上会显示什么。其中一个问题将a[4][4]定义为全局变量,并在程序的某个点尝试访问a[27][27],所以我回答类似于“访问超出数组边界的行为是未定义的”(参考自这里),但老师说a[27][27]的值将为0。 ...
我对这个问题的回答是这个函数:inline bool divisible15(unsigned int x) { //286331153 = (2^32 - 1) / 15 //4008636143 = (2^32) - 286331153 return x * 40...
我想了解以下代码的使用int result = 0; int factor = 1; for (...) { result = ... factor *= 10; } return result; 如果循环迭代了n次,则factor将被乘以10,恰好n次。然而,在被乘以10的总...
请考虑#include <iostream> int main() { double a = 1.0 / 0; double b = -1.0 / 0; double c = 0.0 / 0; std::cout << a <<...