问题标签 [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.
c - mbrtowc 的 s==NULL 案例的目的是什么?
mbrtowc
指定NULL
为(多字节字符指针)参数处理指针s
,如下所示:
如果 s 是空指针,则 mbrtowc() 函数应等效于调用:
在这种情况下,参数 pwc 和 n 的值将被忽略。
据我所知,这种用法在很大程度上是无用的。如果ps
不存储任何部分转换的字符,则调用将简单地返回 0 而没有副作用。如果ps
正在存储一个部分转换的字符,那么由于'\0'
它作为多字节序列中的下一个字节无效('\0'
只能是字符串终止符),因此调用将返回(size_t)-1
. errno==EILSEQ
并ps
处于未定义状态。
预期的用途似乎是重置状态变量,特别是当NULL
被传递ps
并使用内部状态时,类似于mbtowc
有状态编码的行为,但据我所知,这在任何地方都没有指定mbrtowc
,而且与存储部分转换字符的语义冲突(如果mbrtowc
在可能有效的初始子序列之后遇到 0 字节时重置状态,它将无法检测到这个危险的无效序列)。
如果mbrtowc
指定仅在s
is时重置状态变量NULL
,而不是在它指向 0 字节时,则可能会出现理想的状态重置行为,但这种行为会违反所写的标准。这是标准的缺陷吗?据我所知,一旦遇到非法序列,绝对没有办法重置内部状态(在ps
is时使用),因此没有正确的程序可以使用with 。NULL
mbrtowc
ps==NULL
c - 左值在评估后不指定对象?
C99 [部分6.3.2.1/1
] 说
左值是具有对象类型或除 void 以外的不完整类型的表达式; 如果左值在评估时没有指定对象,则行为未定义。
加粗的部分是什么意思?有人可以用一个例子来解释吗?
c++ - 模板函数查找失败
考虑以下示例。
使用 g++ 4.3.0 编译它会引发下一个编译错误:
我应该做些什么不同的事情(如果可能的话,参考 C++ 标准)?为什么会发生,我该如何解决?
编辑
解决方法是在 中创建正确的类型foo
:
但问题仍然存在:为什么它不是自动创建的?
c++ - i = i++ 的行为真的未定义吗?
根据 c++ 标准,
将导致未定义的行为。
如果它可以导致多个结果,我们使用术语“未定义的行为”。i
但是在这里,无论评估顺序如何,最终值都是4,所以这不是真的应该称为“未指定行为”吗?
c++ - 这两种 C++ 初始化器语法在语义上是否有所不同?
假设以下代码是可以正确编译的合法代码,即T
类型名称,即x
变量名称。
语法一:
语法二:
这两个表达式的确切语义是否有所不同?如果有,在什么情况下?
如果这两个表达式确实有不同的语义,我也很好奇标准的哪一部分谈到了这一点。
此外,如果在 T 是标量类型的名称(又名、、、、等)时存在特殊情况int
,long
那么double
当 T 是标量类型与非标量类型时有什么区别?
c++ - C++ 编译器可以假设 const bool & value 不会改变吗?
C++ 编译器可以假设 'const bool &' 值不会改变吗?
例如,假设我有一堂课:
我使用它如下:
标准是否允许编译器假设_test的值不会改变。
我认为不是,只是想确定一下。
c - 执行 memcpy(0,0,0) 是否保证安全?
我对C标准不是很精通,所以请多多包涵。
我想知道它是否按标准保证memcpy(0,0,0)
是安全的。
我能找到的唯一限制是,如果内存区域重叠,那么行为是未定义的......
但是我们可以认为内存区域在这里重叠吗?
c++ - Qt 是符合 C++ 的实现吗?
C++ 标准是否隐含或显式允许像 MOC 那样的语言扩展(或使用您喜欢的任何其他术语)?
也就是说,我们可以在技术上将 Qt(包括 MOC)称为符合 C++ 的实现吗?
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
),是否有任何保证:
- 提供的静态转换能力
A<T>::pointer
是一个可访问的基础?A<U>::pointer
U
T
- 提供静态强制转换的能力
A<T>::pointer
是可访问的基础,并且被继承人的“运行时类型”(无论这在此上下文中意味着什么)是?A<U>::pointer
T
U
U
- 类型
A<void>::pointer
(如果这有意义的话)?
或者有没有我没有想到的问题的解决方案?
java - 一个兼容的 Java 实现不能包含所有的标准库吗?
我正在用 JavaScript 编写 JVM 的实现,这意味着用 JavaScript为标准库编写大量本机代码。然而,标准库中有大量的类只被少数程序使用,试图让需要本地实现的部分本地实现既乏味又没有什么收获。
实际上是否要求有效的 Java 实现包含所有标准库类的实现?或者我可以让核心 Java 库(比如 java.lang.* 和它引用的所有内容)正常工作,然后声称我有一个兼容的 Java 实现,它可能会为引用未实现特性的代码抛出 VerifyErrors?