问题标签 [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.
c++ - C ++中缩小和截断之间的区别?
我一直在阅读一本书(C++ Programming Language Stroustrup 4th ed)。与初始化相关的部分中给出的示例如下:
截断和缩小之间究竟有什么区别?
typescript - 通用对象参数作为其文字
我有一个接受通用对象的简单函数。返回类型应与该对象相同,但与as const
断言的工作方式类似,缩小范围。
例如。以下内容的返回类型应为{ a: "first"; b: "second" }
and not { a: string; b: string }
:
有没有一种机制我们可以指示类型检查器的返回类型myFn
是它的第一个参数类型,缩小?
c++ - 使用“()”和“{}”初始化变量有什么区别?
这段代码 test.cc
在 clang 或 gcc 中
Clang 只是在第 4 行给出错误消息,但错过了第 5 行。在 GCC 中,它编译得很好。
转载于godbolt: https ://godbolt.org/z/rzxTSg
我想知道使用“b {a};”有什么区别 和“c(a);” 初始化一个值。
我想我可能会错过一些东西,有人可以帮我吗?谢谢~
java - Java 中的隐式转换是如何工作的?
我知道在 Java 中整数文字默认是int的,所以如果我写这样的东西
Java 自动将文字值2(默认为 int)转换为字节。如果我写同样的事情
RHS 被评估为 int 并隐式转换为字节。
但是为什么在以下两种情况下不会发生隐式转换呢?
或者在这个
我知道这两个示例的 RHS 都被评估为int。但是为什么Java不像前两种情况那样将其隐式转换为字节。只有在有文字的情况下才会隐式转换为较小的数据类型吗?
c++ - 当不需要检查缩小时,是否需要实例化函数定义?
考虑以下程序:
据我了解,最后一行是一个错误,因为调用f<double>()
是在大括号初始化程序中,即使f<T>
返回 a int
,也需要返回的值int
来确定它是否可以char
按预期缩小到 a g
。这需要f
用 实例化的定义double
,这会导致错误。gcc 和 clang 都拒绝此代码。
但是,如果将 的定义g
更改为接受int
参数:
那么似乎不需要实例化 的定义f
,因为缩小转换必须成功。事实上,gcc 接受了这一点,但 clang 仍然实例化f
并double
拒绝代码。此外,如果f
仅声明但未定义,clang 接受代码,这意味着不需要定义,也不应实例化。
我的推理是否正确,这是一个clang错误,还是需要实例化,这实际上是一个gcc错误?
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
属性的情况下缩小类型?(最好在对象/数组创建时。)
c++ - 常量表达式的计算结果为 -1,不能缩小为类型 'char' [-Wc++11-narrowing] 错误
我正在使用旧代码,每次-1
使用较新的 C++ 标准编译时都会出错。
这是片段代码
我尝试将代码和括号更改为以下警告:缩小转换 C++11的括号,但我仍然遇到相同的错误。有没有不恢复到旧 C++ 标准的解决方案?
typescript - 为什么 Typescript 无法找出我的代码中的类型?
为什么 Typescript 编译器会抱怨以下代码?
intrinsics - 将每个 AVX 32 位元素的低 16 位存储到内存中
我在一个 AVX 值中有 8 个整数值,__m256i
它们的上限都是 0xffff,所以高 16 位都是零。
现在我想将这 8 个值存储为 8 个连续uint16_t
值。
我怎样才能以这种方式将它们写入内存?我可以以某种方式将__m256i
8 个打包整数的__m128i
值转换为包含 8 个打包短裤的值吗?
我的目标是 AVX2 内在函数,但如果它可以在 AVX 内在函数中完成,那就更好了。
typescript - 有没有办法用可选参数缩小打字稿重载?
我正在尝试执行以下操作:
我在ERROR
注释指示的行中收到错误。
从javascript的角度来看,该功能很好:
我的问题是如何设置函数签名,这样它就可以正常工作,而无需进行任何转换,也无需在函数体中设置任何冗余变量。即我想避免做let gVal: number = g || (r as any).g;
.
另一种选择是将其拆分为两个函数并让一个调用另一个;但我不会用 javascript 来做这件事,所以我不得不用打字稿来做这件事似乎是错误的。
抱歉,如果这是重复的。我花了几个小时查看类似的问题,但找不到任何解决此问题的方法。