language-lawyer相关内容

初始化是否需要左值到右值的转换?是`int x = x;` UB 吗?

C++ 标准在 3.3.2“声明点"中包含一个半著名的“令人惊讶"名称查找示例: int x = x; 这用自身初始化 x,它(作为原始类型)未初始化,因此具有不确定的值(假设它是一个自动变量). 这实际上是未定义的行为吗? 根据4.1“左值到右值转换",对未初始化的值执行左值到右值转换是未定义的行为.右手边的 x 是否进行了这种转换?如果是这样,该示例实际上是否会有未定义的行为? ..
发布时间:2021-12-01 15:48:42 C/C++开发

通过下标获取最后一个数组元素的地址:C++ 标准是否合法?

我已经看到它多次断言 C++ 标准不允许以下代码: int 数组[5];int *array_begin = &array[0];int *array_end = &array[5]; &array[5] 在这种情况下是合法的 C++ 代码吗? 如果可能,我想要一个参考标准的答案. 了解它是否符合 C 标准也很有趣.如果它不是标准的 C++,为什么决定将它与 array + 5 或 ..
发布时间:2021-12-01 15:33:39 C/C++开发

一个正 lambda:'+[]{}' - 这是什么魔法?

在堆栈溢出问题重新定义 C++11 中不允许的 lambda,为什么?,一个给出了无法编译的小程序: int main() {自动测试 = []{};测试 = []{};} 问题得到了回答,一切看起来都很好.然后是 Johannes Schaub 并制作了 一个有趣的观察: 如果你在第一个 lambda 之前放一个 +,它会神奇地开始工作. 所以我很好奇:为什么下面的方法有效? ..
发布时间:2021-12-01 15:32:34 C/C++开发

是否“未定义的行为"真的允许*任何*发生吗?

“未定义行为"的经典伪造示例当然是“鼻魔"— 无论 C 和 C++ 标准允许什么,这在物理上都是不可能的. 因为 C 和 C++ 社区倾向于如此强调未定义行为的不可预测性,以及允许编译器在遇到未定义行为时使程序按字面意思做任何事情的想法,我曾假设标准对未定义的行为没有任何限制. 但是 C++ 标准中的相关引用似乎是 一个>: [C++14: defns.undefined]: ..
发布时间:2021-12-01 15:04:25 C/C++开发

C++ 标准是否在 C++14 中关于不确定值和未定义行为的使用发生了变化?

如初始化是否需要左值右值转换?是 int x = x; UB 吗? C++ 标准在 3.3.2 声明点 部分有一个令人惊讶的例子,其中int 用它自己的不确定值初始化: int x = 12;{ int x = x;} 这里第二个 x 用它自己的(不确定的)值初始化.— 结束示例 ] Johannes 对这个问题的回答表明是未定义的行为,因为它需要左值到右值的转换. 在最新的 C+ ..
发布时间:2021-12-01 15:03:40 C/C++开发

如果我将变量重新定义为auto,并且推导出的类型相同,它是否格式正确?

看看这个片段: int a;外部国际b;汽车 b = a; 它是否格式良好?Clang 成功编译了它,但 GCC 和 MSVC 没有. (当我回答如何声明和定义具有推导类型的静态成员?) 解决方案 Tl;DR; clang 是正确的,逻辑是 [dcl.spec.auto] 允许这样做,并限制推导出的返回类型 [dcl.spec.auto]p11 已添加,否则没有限制,因此这 ..
发布时间:2021-11-30 18:16:50 C/C++开发

是否使用“auto"进行声明?匹配使用具体类型说明符的 extern 声明?

考虑以下程序: extern int x;自动 x = 42;int main() { } Clang 3.5 接受(现场演示),GCC 4.9 和 VS2013 不接受(前者的现场演示).谁是对的,C++ 标准中规定的正确行为在哪里? 解决方案 令人惊讶的是,标准中几乎没有这方面的内容.我们听到的关于重新申报的所有信息是: [C++11: 3.1/1]: 声明(第 7 条)可以 ..
发布时间:2021-11-30 18:10:44 C/C++开发

如何在 UML 中对协变关联类建模?

简而言之 我想为两个类之间的协变关联建模,每个类都可以专门化.我需要展示相关关联类的专业化.但我想避免我的模型可能意味着存在冗余关联(即泛化之间的关联和特化之间的关联. 问题的逐步说明 我在 UML 类图中有一个 Person 和一个 Contract 之间的多对多关联.一个人可以涉及多个合同,反之,一个合同可以涉及多个人.每个相关人员都参与了合同中的角色.一个人甚至可以多次参与 ..

是否可以通过成员地址访问超过结构的大小,并分配足够的空间?

具体是下面的代码,标记下面的那一行行吗? struct S{一个;};#include int main(){结构 S * p;p = malloc(sizeof(struct S) + 1000);//这一行:*(&(p->a) + 1) = 0;} 人们在此处争论不休,但没有人给出令人信服的解释或参考. 他们的论点略有不同,但基本相同 typedef struct _pack{in ..
发布时间:2021-11-26 20:02:38 其他开发

JLS 是否需要内联最终字符串常量?

我在操作一些字节码时遇到了一个问题,其中某个 final String 常量没有被 java 编译器 (Java 8) 内联,请参见下面的示例: 公共类MyTest{private static final String ENABLED = "Y";私有静态最终字符串禁用=“N";私有静态布尔值是启用的(字符串键){返回 key.equals("A");}私有静态字符串getString(字符串 ..
发布时间:2021-11-22 16:24:42 Java开发

关于 C 中数组初始化的困惑

在C语言中,如果像这样初始化一个数组: int a[5] = {1,2}; 那么所有未显式初始化的数组元素将被隐式初始化为零. 但是,如果我像这样初始化一个数组: int a[5]={a[2]=1};printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]); 输出: 1 0 1 0 0 我不明白,为什么 a[0] 打印 1 而 ..
发布时间:2021-11-18 04:49:56 其他开发

数组的地址是否等于它在 C++ 中的第一个元素的地址?

这可以在 C 中得到保证,因为 WG14/N1570 中有以下语句: 6.2.5/20 ... 数组类型描述了具有特定成员对象类型(称为元素类型)的连续分配的非空对象集. 但是在WG21/N4527中,即在C++中,对应的语句变成了 8.3.4/1 ...数组类型的对象包含连续分配的 N 个 T 类型子对象的非空集合. 而将“describes"改为“contains",则 ..
发布时间:2021-11-18 04:38:52 C/C++开发