是`x--> 0 && C++ 中 array[x]` 定义明确的行为?
当我在左侧后递增布尔表达式时,可以在布尔表达式的两侧使用 x 吗? 有问题的一行是: if(x-- > 0 && array[x]) { /* … use x … */ } 这是通过标准…
const_cast 和 UB
$5.2.11/7 - “[注:取决于 对象的类型,写操作 通过指针、左值或指针 到由 a 产生的数据成员 const_cast 抛弃 a const-qualifier68) 可能 产生 未定…
在 C99 中,f()+g() 是未定义还是只是未指定?
我曾经认为在C99中,即使函数f和g的副作用干扰,并且虽然表达式f() + g() 不包含序列点,f 和 g 将包含一些序列点,因此行为将是未指定的:f() 将在 g…
为什么这个语句在 java 中不起作用 x ^= y ^= x ^= y;
int x=1; int y=2; x ^= y ^= x ^= y; 我期望这些值被交换。但它给出 x=0 和 y=1。 当我用C语言尝试时,它给出了正确的结果。…
我们可以通过指针来改变const定义的对象的值吗?
#include int main() { const int a = 12; int *p; p = &a; *p = 70; } 它会起作用吗?…
是“struct hack”吗?技术上未定义的行为?
我要问的是众所周知的“结构的最后一个成员具有可变长度”技巧。它是这样的: struct T { int len; char s[1]; }; struct T *p = malloc(sizeof(struc…
优化掉“while(1);”在 C++0x 中
已更新,见下文! 我听说并读到 C++0x 允许编译器为以下代码片段打印“Hello”, #include int main() { while(1) ; std::cout << "Hello" << std::en…
这是未定义的 C 行为吗?
我们班的 C 编程教授问了这个问题: 你得到了代码: int x=1; printf("%d",++x,x+1); 它总是会产生什么输出? 大多数学生表示未定义行为。谁能帮助我…
表达式的行为:已定义还是未定义?
我有以下代码 int m[4]={1,2,3,4}, *y; y=m; *y = f(y++); // Expression A 我的朋友告诉我表达式 A 具有明确定义的行为,但我不确定他是否正确。 根…
显式调用析构函数是否会导致此处的未定义行为?
在我看来,以下代码(来自一些 C++ 问题)应该会导致 UB,但看起来并非如此。这是代码: #include using namespace std; class some{ public: ~some()…
这是 ATL::CComVariant 中的自分配错误吗?
ATL::CComVariant 具有 一些赋值运算符。我在实现中看到的是,在接受 LPCOLESTR 、 IUnknown* 或 IDispatch* 的赋值运算符中,第一个操作是调用 Clear…
C 中字符数组的未定义行为(?)
当我尝试 char bla[32] = "foobar"; int i; putchar(bla[i]); 使用 strlen(bla) 我< 32,bla[i] 始终为 \0。但这实际上不是未定义的行为,应该避免吗…
C++ 中的命名空间别名
众所周知,向命名空间 std 添加声明/定义会导致未定义的行为。此规则的唯一例外是模板专业化。 那么下面的“黑客”呢? #include namespace std_ { vo…