168得票5回答
为什么这个循环会产生“warning: iteration 3u invokes undefined behavior”并输出超过4行?

编译这个:#include <iostream> int main() { for (int i = 0; i < 4; ++i) std::cout << i*1000000000 << std::endl; } 而 gcc...

167得票9回答
在C++0x中优化掉一个"while(1);"

更新,见下文! 我听说并阅读了C++0x允许编译器打印以下片段的“Hello”: #include <iostream> int main() { while(1) ; std::cout << "Hello" << std::end...

163得票16回答
实际上,为什么不同的编译器会计算出不同的int x = ++i + ++i;值?

考虑下面的代码:int i = 1; int x = ++i + ++i; 假设这段代码能够编译,我们有一些猜测关于编译器可能会对这段代码做什么。 两个 ++i 都返回 2,结果是 x=4。 一个 ++i 返回 2,另一个返回 3,结果是 x=5。 两个 ++i 都返回 3,结果是 x=6...

149得票5回答
为什么增强的GCC 6优化器会破坏实际的C++代码?

GCC 6有一项新的优化器特性:它假设this总是非空并基于此进行优化。 值范围传播现在假定C++成员函数的this指针是非空的。这消除了常见的空指针检查但也破坏了一些不符合规范的代码库(例如Qt-5、Chromium、KDevelop)。可以使用-fno-delete-null-po...

148得票5回答
访问未激活的联合成员和未定义行为?

我原本认为访问 union 成员变量时,除最后一个已设置的成员外,访问其他成员是未定义行为,但我似乎找不到可靠的参考资料(除了一些回答声称这是未定义行为,但没有任何标准支持)。 因此,这是否为未定义行为?

139得票6回答
为什么在使用GCC的x86编译器时整数溢出会导致无限循环?

以下代码在GCC上会进入无限循环:#include <iostream> using namespace std; int main(){ int i = 0x10000000; int c = 0; do{ c++; i...

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

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

123得票8回答
“struct hack”是否属于技术上未定义行为?

我正在询问的是众所周知的“结构体最后一个成员具有可变长度”的技巧。它大致如下: struct T { int len; char s[1]; }; struct T *p = malloc(sizeof(struct T) + 100); p->len = 100; ...

119得票9回答
我如何从一个8位整数中获取大于8位的值?

我追踪到了一个非常难以处理的 bug,它藏在这个小小的代码片段后面。根据 C++ 规范,有符号溢出是未定义行为,但只有当值扩展到 bit 宽度 sizeof(int) 时溢出才会未定义。据我所知,只要 sizeof(char) < sizeof(int),递增一个 char 不应该是未定...

114得票3回答
将一个C++对象传递到自己的构造函数中是否合法?

我很惊讶地发现以下内容居然可以正常运行: #include <iostream> int main(int argc, char** argv) { struct Foo { Foo(Foo& bar) { std::cou...