问题标签 [narrowing]

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 投票
4 回答
447 浏览

c++ - C ++中缩小和截断之间的区别?

我一直在阅读一本书(C++ Programming Language Stroustrup 4th ed)。与初始化相关的部分中给出的示例如下:

截断和缩小之间究竟有什么区别?

0 投票
1 回答
31 浏览

typescript - 通用对象参数作为其文字

我有一个接受通用对象的简单函数。返回类型应与该对象相同,但与as const断言的工作方式类似,缩小范围。

例如。以下内容的返回类型应为{ a: "first"; b: "second" }and not { a: string; b: string }

有没有一种机制我们可以指示类型检查器的返回类型myFn是它的第一个参数类型,缩小?

0 投票
0 回答
53 浏览

c++ - 使用“()”和“{}”初始化变量有什么区别?

这段代码 test.cc

在 clang 或 gcc 中

Clang 只是在第 4 行给出错误消息,但错过了第 5 行。在 GCC 中,它编译得很好。

转载于godbolt: https ://godbolt.org/z/rzxTSg

我想知道使用“b {a};”有什么区别 和“c(a);” 初始化一个值。

我想我可能会错过一些东西,有人可以帮我吗?谢谢~

0 投票
4 回答
1539 浏览

java - Java 中的隐式转换是如何工作的?

我知道在 Java 中整数文字默认是int的,所以如果我写这样的东西

Java 自动将文字值2(默认为 int)转换为字节。如果我写同样的事情

RHS 被评估为 int 并隐式转换为字节。

但是为什么在以下两种情况下不会发生隐式转换呢?

或者在这个

我知道这两个示例的 RHS 都被评估为int。但是为什么Java不像前两种情况那样将其隐式转换为字节。只有在有文字的情况下才会隐式转换为较小的数据类型吗?

0 投票
1 回答
131 浏览

c++ - 当不需要检查缩小时,是否需要实例化函数定义?

考虑以下程序:

据我了解,最后一行是一个错误,因为调用f<double>()是在大括号初始化程序中,即使f<T>返回 a int,也需要返回的值int来确定它是否可以char按预期缩小到 a g。这需要f用 实例化的定义double,这会导致错误。gcc 和 clang 都拒绝此代码。


但是,如果将 的定义g更改为接受int参数:

那么似乎不需要实例化 的定义f,因为缩小转换必须成功。事实上,gcc 接受了这一点,但 clang 仍然实例化fdouble拒绝代码。此外,如果f仅声明但未定义,clang 接受代码,这意味着不需要定义,也不应实例化。

我的推理是否正确,这是一个clang错误,还是需要实例化,这实际上是一个gcc错误?

0 投票
2 回答
346 浏览

typescript - 打字稿:[编译时间]具有“as const”类型缩小的可写(-可读)数组/对象

使用const assertion,可以很好地将对象/数组文字的类型缩小到它的元素。

例如

(没有as const,T会是type T = (string | number)[][],它非常宽,有时是不需要的。)

现在,问题是as const数组readonly也因此而变得更好,而我只是将它的类型缩小了。因此,它不能传递给以下函数。

错误是:

type'readonly [readonly [5, "hello"], readonly [5, "bye"]]'的参数不能分配给 type 的参数'[5, string][]'。该类型'readonly [readonly [5, "hello"], readonly [5, "bye"]]''readonly'并且不能分配给可变类型'[5, string][]'。(2345)

问题

如何在不获取不需要的readonly属性的情况下缩小类型?(最好在对象/数组创建时。)

0 投票
1 回答
964 浏览

c++ - 常量表达式的计算结果为 -1,不能缩小为类型 'char' [-Wc++11-narrowing] 错误

我正在使用旧代码,每次-1使用较新的 C++ 标准编译时都会出错。

这是片段代码

我尝试将代码和括号更改为以下警告:缩小转换 C++11的括号,但我仍然遇到相同的错误。有没有不恢复到旧 C++ 标准的解决方案?

0 投票
1 回答
161 浏览

typescript - 为什么 Typescript 无法找出我的代码中的类型?

为什么 Typescript 编译器会抱怨以下代码?

链接到游乐场

0 投票
1 回答
202 浏览

intrinsics - 将每个 AVX 32 位元素的低 16 位存储到内存中

我在一个 AVX 值中有 8 个整数值,__m256i它们的上限都是 0xffff,所以高 16 位都是零。

现在我想将这 8 个值存储为 8 个连续uint16_t值。

我怎样才能以这种方式将它们写入内存?我可以以某种方式将__m256i8 个打包整数的__m128i值转换为包含 8 个打包短裤的值吗?

我的目标是 AVX2 内在函数,但如果它可以在 AVX 内在函数中完成,那就更好了。

0 投票
3 回答
575 浏览

typescript - 有没有办法用可选参数缩小打字稿重载?

我正在尝试执行以下操作:

我在ERROR注释指示的行中收到错误。

从javascript的角度来看,该功能很好:

我的问题是如何设置函数签名,这样它就可以正常工作,而无需进行任何转换,也无需在函数体中设置任何冗余变量。即我想避免做let gVal: number = g || (r as any).g;.

另一种选择是将其拆分为两个函数并让一个调用另一个;但我不会用 javascript 来做这件事,所以我不得不用打字稿来做这件事似乎是错误的。

TS游乐场链接

抱歉,如果这是重复的。我花了几个小时查看类似的问题,但找不到任何解决此问题的方法。