问题标签 [language-lawyer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
631 浏览

c - mbrtowc 的 s==NULL 案例的目的是什么?

mbrtowc指定NULL为(多字节字符指针)参数处理指针s,如下所示:

如果 s 是空指针,则 mbrtowc() 函数应等效于调用:

在这种情况下,参数 pwc 和 n 的值将被忽略。

据我所知,这种用法在很大程度上是无用的。如果ps不存储任何部分转换的字符,则调用将简单地返回 0 而没有副作用。如果ps正在存储一个部分转换的字符,那么由于'\0'它作为多字节序列中的下一个字节无效('\0'只能是字符串终止符),因此调用将返回(size_t)-1. errno==EILSEQps处于未定义状态。

预期的用途似乎是重置状态变量,特别是当NULL被传递ps并使用内部状态时,类似于mbtowc有状态编码的行为,但据我所知,这在任何地方都没有指定mbrtowc,而且与存储部分转换字符的语义冲突(如果mbrtowc在可能有效的初始子序列之后遇到 0 字节时重置状态,它将无法检测到这个危险的无效序列)。

如果mbrtowc指定仅在sis时重置状态变量NULL,而不是在它指向 0 字节时,则可能会出现理想的状态重置行为,但这种行为会违反所写的标准。这是标准的缺陷吗?据我所知,一旦遇到非法序列,绝对没有办法重置内部状态(在psis时使用),因此没有正确的程序可以使用with 。NULLmbrtowcps==NULL

0 投票
2 回答
214 浏览

c - 左值在评估后不指定对象?

C99 [部分6.3.2.1/1] 说

左值是具有对象类型或除 void 以外的不完整类型的表达式; 如果左值在评估时没有指定对象,则行为未定义。

加粗的部分是什么意思?有人可以用一个例子来解释吗?

0 投票
3 回答
373 浏览

c++ - 模板函数查找失败

考虑以下示例。

使用 g++ 4.3.0 编译它会引发下一个编译错误:

我应该做些什么不同的事情(如果可能的话,参考 C++ 标准)?为什么会发生,我该如何解决?

编辑

解决方法是在 中创建正确的类型foo

但问题仍然存在:为什么它不是自动创建的?

0 投票
9 回答
14850 浏览

c++ - i = i++ 的行为真的未定义吗?

可能重复:
谁能解释这些未定义的行为(i = i++ + ++i,i = i++ 等……)

根据 c++ 标准,

将导致未定义的行为。

如果它可以导致多个结果,我们使用术语“未定义的行为”。i但是在这里,无论评估顺序如何,最终值都是4,所以这不是真的应该称为“未指定行为”吗?

0 投票
5 回答
409 浏览

c++ - 这两种 C++ 初始化器语法在语义上是否有所不同?

假设以下代码是可以正确编译的合法代码,即T类型名称,即x变量名称。

语法一:

语法二:

这两个表达式的确切语义是否有所不同?如果有,在什么情况下?

如果这两个表达式确实有不同的语义,我也很好奇标准的哪一部分谈到了这一点。

此外,如果在 T 是标量类型的名称(又名、、、、等)时存在特殊情况intlong那么double当 T 是标量类型与非标量类型时有什么区别?

0 投票
3 回答
2569 浏览

c++ - C++ 编译器可以假设 const bool & value 不会改变吗?

C++ 编译器可以假设 'const bool &' 值不会改变吗?

例如,假设我有一堂课:

我使用它如下:

标准是否允许编译器假设_test的值不会改变。

我认为不是,只是想确定一下。

0 投票
4 回答
27568 浏览

c - 执行 memcpy(0,0,0) 是否保证安全?

我对C标准不是很精通,所以请多多包涵。

我想知道它是否按标准保证memcpy(0,0,0)是安全的。

我能找到的唯一限制是,如果内存区域重叠,那么行为是未定义的......

但是我们可以认为内存区域在这里重叠吗?

0 投票
4 回答
382 浏览

c++ - Qt 是符合 C++ 的实现吗?

C++ 标准是否隐含或显式允许像 MOC 那样的语言扩展(或使用您喜欢的任何其他术语)?

也就是说,我们可以在技术上将 Qt(包括 MOC)称为符合 C++ 的实现吗?

0 投票
3 回答
407 浏览

c++ - 标准库分配器指针类型的要求

我正在尝试编写一个四叉树稀疏矩阵类。简而言之,aquadtree_matrix<T>要么是零矩阵,要么是 的四元(ne, nw, se, sw)quadtree_matrix<T>

我想最终测试不同的分配方案,因为这可能会影响线性代数运算的性能。因此,我还将quadtree_matrix在标准分配器类型上进行模板化,以便我可以重用现有的分配器。

我将不得不分配两种不同类型的数据: aT或 a node,其中包含四个指针(指向 T 或节点)。对于我将考虑的所有算法,我确切地知道期望什么样的数据,因为我知道在算法的任何时候我所面临的子矩阵的大小是多少(我什至不需要存储这些大小)。

我当然会使用两种不同的分配器:这没关系,因为分配器类型提供rebind模板和模板复制构造函数(并且旨在用作值类型,正如get_allocator标准容器的成员通过返回副本所建议的那样)。

问题是分配器成员函数使用某种pointer类型,它不需要是普通指针。一些分配器(增强进程间分配器)广泛使用此功能。

如果分配器指针类型是花园品种指针,我不会有任何问题:至少,我可以使用指向 void 的指针并将它们重新解释为正确的类型(node*T*)。我也可以使用联合(可能更好)。

据我所知,对类型的 POD 没有要求allocator::pointer。它们只需要是随机访问迭代器。

现在,我的问题是:

给定一个分配器类模板A<T>(或其等价物A::rebind<T>::other),是否有任何保证:

  1. 提供的静态转换能力A<T>::pointer是一个可访问的基础?A<U>::pointerUT
  2. 提供静态强制转换的能力A<T>::pointer是可访问的基础,并且被继承人的“运行时类型”(无论这在此上下文中意味着什么)是?A<U>::pointerTUU
  3. 类型A<void>::pointer(如果这有意义的话)?

或者有没有我没有想到的问题的解决方案?

0 投票
1 回答
125 浏览

java - 一个兼容的 Java 实现不能包含所有的标准库吗?

我正在用 JavaScript 编写 JVM 的实现,这意味着用 JavaScript为标准库编写大量本机代码。然而,标准库中有大量的类只被少数程序使用,试图让需要本地实现的部分本地实现既乏味又没有什么收获。

实际上是否要求有效的 Java 实现包含所有标准库类的实现?或者我可以让核心 Java 库(比如 java.lang.* 和它引用的所有内容)正常工作,然后声称我有一个兼容的 Java 实现,它可能会为引用未实现特性的代码抛出 VerifyErrors?