language-lawyer相关内容

Eclipse ECJ 接受此代码,javac 不接受 - 谁是对的?

考虑以下 returnsNull 函数和对它的泛型调用: public static 列表returnNull(Class clazz) {返回空;}公共静态无效主(字符串[] args){列表>l = returnNull(AtomicReference.class);} Eclipse 编译器在设置为 Java 8 时接受它,但 Java 8 中的 j ..
发布时间:2021-11-22 16:47:41 Java Web开发

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 Web开发

关于 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 其他开发

以一致的方式别名结构和数组

在 ISO C 之前的旧时代,以下代码不会让任何人感到惊讶: struct Point {双x;双y;双z;};double dist(struct Point *p1, struct Point *p2) {双 d2 = 0;double *coord1 = &p1.x;double *coord2 = &p2.x;国际我;对于 (i=0; i 当时,我们都知道 double 对齐允许编译器 ..
发布时间:2021-11-18 04:36:25 其他开发

“数组"的定义是什么?在 C?

标准对数组类型进行了细致的定义,但我没有看到数组的任何定义. 我们可能会说“数组类型的对象",但这并不正确,因为无类型对象(例如由 malloc 分配的空间)被描述为数组. 动机:fprintf (C11 7.21.6.1/8) 中 %s 的规范说: 参数应该是指向字符类型数组的初始元素的指针 但是取代码 char s[] = "hello";printf("%s", s+ ..
发布时间:2021-11-18 04:26:07 其他开发

指针算术在数组之外仍然有效吗?

我总是读到指针算术是定义的,只要你不离开数组的边界.我不确定我是否完全理解这意味着什么,我有点担心.因此这个问题. 假设我从一个指向数组开头的指针开始: int *p = (int*) malloc(4 * sizeof(int)); 现在我创建了两个位于数组边界之外的新指针: int *q = p + 10;int *r = p - 2; 现在指针 q-10, q-9, ..., ..
发布时间:2021-11-18 04:22:57 其他开发

在确定数组的大小时,括号会有所不同吗?

以下程序在 gcc 4.8.2 上两次打印相同的数字: #include int main(){字符 [13];printf("sizeof a 是 %zu\n", sizeof a );printf("sizeof(a) 是 %zu\n", sizeof(a));} 根据这篇 reddit 帖子,gcc 在这方面不符合标准,因为当数组到指针衰减不发生时,括号表达式不在例外列表中. 这家 ..
发布时间:2021-11-18 04:10:56 其他开发

这段代码如何在不使用 sizeof() 的情况下确定数组大小?

通过一些 C 面试问题,我发现了一个问题,说明“如何在不使用 sizeof 运算符的情况下在 C 中找到数组的大小?",有以下解决方案.它有效,但我不明白为什么. #include int main() {int a[] = {100, 200, 300, 400, 500};整数大小 = 0;大小 = *(&a + 1) - a;printf("%d\n", 大小);返回0;} 正如预期的那 ..
发布时间:2021-11-18 03:54:26 其他开发

我可以引用初始值设定项列表的先前成员吗?

假设我想引用我已经定义的 initializer_list 的成员.我可以吗? 此代码在 Visual Studio 和 gcc 中编译并给出预期值:“13 55",我会只是想知道这是合法的: const int foo[2] = {13, foo[0] + 42}; 解决方案 所以我们这里有 C++ 标准草案的 8.5.1 部分涵盖的聚合初始化,它说: 聚合是数组或类 [... ..
发布时间:2021-11-18 03:48:42 其他开发

取消引用 50% 的越界指针(数组数组)

这是我的“我不懂 C 和 C++ 中的指针"集合中的一个新问题. 如果我将具有相等值的两个指针的位(指向相同的内存地址)混合在一起,恰好具有完全相同的位表示,当一个是可取消引用的,一个是最后一个,标准怎么说应该发生吗? #include #include #include //必需:a == b//将 a 和 b 的副本返回到 dest//(任一指针的字节的一半)int *copy2to1 ..
发布时间:2021-11-18 03:48:36 其他开发

以 C++ 方式别名结构和数组

这是我的另一个问题 的 C++ 后续 在 ISO C 之前的旧时代,以下代码不会让任何人感到惊讶: struct Point {双x;双y;双z;};double dist(struct Point *p1, struct Point *p2) {双 d2 = 0;double *coord1 = &p1->x;double *coord2 = &p2->x;国际我;对于 (i=0; i ..
发布时间:2021-11-18 03:26:06 其他开发

取消引用数组类型的结束指针

是否在 C++ 中很好地定义了取消引用指向数组类型的最后一个指针? 考虑以下代码: #include #include int main(){//一个整数数组int my_array[] = { 1, 2, 3 };//指向数组的指针使用 array_ptr_t = int(*)[3];array_ptr_t my_array_ptr = &my_array;//指向数组末尾的指针arra ..
发布时间:2021-11-18 03:11:35 其他开发

取消引用数组类型的结束指针

是否在 C++ 中很好地定义了取消引用指向数组类型的最后一个指针? 考虑以下代码: #include #include int main(){//一个整数数组int my_array[] = { 1, 2, 3 };//指向数组的指针使用 array_ptr_t = int(*)[3];array_ptr_t my_array_ptr = &my_array;//指向数组末尾的指针arra ..
发布时间:2021-11-18 03:11:25 其他开发

通过结构别名数组

我正在阅读 ISO/IEC 9899:TC2 中 6.5 的第 7 段. 它允许通过以下方式对对象进行左值访问: 包含上述之一的聚合或联合类型其成员之间的类型(包括递归地,子聚合或包含联合), 请参考文档了解“上述"类型是什么,但它们肯定包括对象的有效类型. 它在一个注释为: 此列表的目的是指定在哪些情况下对象可能有别名也可能没有别名. 我认为(例如)以下内容是 ..
发布时间:2021-11-18 03:06:54 其他开发

非解除引用的迭代器是否超过了“最后一个"?数组未定义行为的迭代器?

Given int foo[] = {0, 1, 2, 3}; 我想知道指向“最后一个"的迭代器是否无效.例如:auto bar = cend(foo) + 1; 在 Stack Overflow 问题中,有大量投诉和警告称这是“未定义的行为",如下所示:c++ 当过去结束迭代器时迭代器 + 整数的结果是什么? 不幸的是,唯一的来源是挥手. 我越来越难以购买,例如: int* bar ..
发布时间:2021-11-18 03:03:41 其他开发

指针相互转换与具有相同地址

N4659标准工作草案 说: [基本.化合物] 如果两个对象是指针可相互转换的,则它们具有相同的地址 然后注意到 一个数组对象和它的第一个元素是指针不可转换的,即使它们有相同的地址 使数组对象及其第一个元素不可相互转换的基本原理是什么?更一般地说,将指针可相互转换的概念与具有相同地址的概念区分开来的基本原理是什么?是不是哪里有什么矛盾? 似乎给定了这个语句序列 i ..
发布时间:2021-11-18 02:43:58 其他开发