问题标签 [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.
java - 缩小在 Java 中的方法调用中如何工作?
为什么这会给出编译时错误?2 在编译时是常数,因此这里应该允许缩小,因为 2 在字节范围内。
错误是:ForTest 类型中的方法 sum(int,byte) 不适用于争论 (int,int)。
编辑:我认为答案就在这里:http ://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.3但我不明白:(
c++ - C++ 中的窄化转换
在Beej 的网络编程指南中,有一个函数旨在提供一种可移植的方式来序列化 16 位整数。
我不明白为什么该语句*buf++ = i;
是可移植的,因为将无符号整数 ( i
) 分配给无符号字符 ( *buf
) 会导致缩小转换。
- C++ 标准是否保证在这样的转换中,
unsigned int
总是被截断并且它的最低有效 8 位被保留在unsigned char
? 如果没有,是否有任何解决问题的首选方法?将功能体更改为以下内容是否足够?
*buf++ = (i>>8) & 0xFFFFU; *buf++ = i & 0xFFFFU;
php - 具有多个值的相同元键的元查询
我想显示 "modelyear
between 2003 to 2006 and modelyear between 2007 to 2009 AND price
between 1 lakh to 3 lakh and price between 3 lakh to 5 lakh"
在 2003 年至 2009 年之间具有 MEANS 记录且价格在 10 万至 50 万之间的记录,如 jabong.com 窄搜索。
我使用了以下(见下文)。但它不起作用。
有人可以建议,如何在wordpress 元查询中解决它?请!
c++ - C++11:使用模数“缩小 {} 内的转换”
我尝试编译以下代码gcc
并C++11
启用:
我收到这些警告:
在 { } [-Wnarrowing] 内将 '(id % 3u)' 从 'unsigned int' 缩小为 'unsigned char' 的转换
有没有办法帮助编译器找出id % 3的结果适合unsigned char?
c++ - 在列表初始化中缩小转换为 bool - 奇怪的行为
考虑这段 C++11 代码:
在x
. 根据我对标准的理解,这是格式错误的代码,我们应该看到一些诊断。
Visual C++ 2013 发出错误:
但是,Clang 3.5.0 和 GCC 4.9.1 都使用以下选项
编译这段代码没有错误和警告。运行程序会输出 a 1
(这并不奇怪)。
现在,让我们深入到陌生的领域。
更改X(bool arg)
为X(int arg)
,突然,我们收到了来自 Clang 的错误
和来自 GCC 的警告
这看起来更像我的预期。
现在,保留bool
构造函数参数(即恢复为X(bool arg)
),并更改double d = 7.0;
为int d = 7;
. 再次,来自 Clang 的缩小错误,但 GCC 根本不发出任何诊断并编译代码。
如果我们将常量直接传递给构造函数,我们可以获得更多的行为变体,有些奇怪,有些是预期的,但我不会在这里列出它们 - 这个问题已经变得太长了。
我想说这是在标准一致性方面 VC++ 正确而 Clang 和 GCC 错误的罕见情况之一,但是,鉴于这些编译器各自的跟踪记录,我对此仍然非常犹豫。
专家们怎么看?
标准参考(引自 C++11 的最终标准文档,ISO/IEC 14882-2011):
在 8.5.4 [dcl.init.list] 第 3 段中,我们有:
— 否则,如果 T 是类类型,则考虑构造函数。枚举适用的构造函数,并通过重载决议(13.3、13.3.1.7)选择最佳构造函数。如果需要缩小转换(见下文)来转换任何参数,则程序格式错误。
在同一部分的第 7 段中,我们有:
缩小转换是一种隐式转换
——从浮点类型到整数类型,或者
——从 long double 到 double 或 float,或者从 double 到 float,除非源是常量表达式并且转换后的实际值是在可以表示的值范围内(即使不能精确表示),或者
——从整数类型或无作用域枚举类型到浮点类型,除非源是常量表达式和转换后的实际值将适合目标类型并在转换回原始类型时生成原始值,或者
— 从整数类型或无作用域枚举类型到不能表示原始类型的所有值的整数类型,除非源是常量表达式并且转换后的实际值将适合目标类型并生成原始值当转换回原始类型时。
[注意:如上所述,列表初始化中的顶级不允许此类转换。-结束注释]
在 3.9.1 [basic.fundamental] 第 7 段中,我们有:
bool、char、char16_t、char32_t、wchar_t 类型以及有符号和无符号整数类型统称为整数类型。48 整数类型的同义词是整数类型。
(在这个阶段我开始质疑一切......)
c++ - 警告:缩小转换 C++11
g++ 4.9.0 -O2 -std=c++11
我收到警告:
但是,如果我在函数内部使用(...)
insted of进行操作,警告就会消失。为什么?{...}
operator-
java - 在Java中强制返回类型缩小?
可以在 Java 中的覆盖方法中缩小返回类型。
但是否有可能在声明期间强制缩小范围?
例如,这在模式中可能很好,其中内部类与外部类同时子类化:
此代码编译失败,并出现“接口容器不能使用不同的参数多次实现”的错误。
如何避免这种情况?
当然,我可以写
但是这样我就可以忘记覆盖createMember()
和违反模式。
c++ - 创建避免缩小的字符数组
我正在编写一个单元测试,根据预期的数组检查一些二进制数据。有问题的预期数组只是一些字节序列,具体无关紧要:
这在 C++ 中编译得很好,但在 C++11 中,这会在缩小转换时发出警告。我编译是-Werror
因为警告很重要,所以该行不适合我编译。据我所知,char没有文字后缀,所以看来我必须这样做:
这对我来说似乎很笨拙。有没有更好的方法来构造这个字符数组?(在删除-Werror
或添加之外-Wno-narrowing
)。
c++ - 在 { } 内将“65280”从“int”缩小到“short int”的范围
我有两个数组:
编译时,我收到以下消息:
[警告] 在 { } [-Wnarrowing] 内缩小从 'int' 到 'short int' 的 '65280' 转换
对于每个包含 FF 的元素,例如 0xFF0D 或 0xFFFF
另外,我总是遇到访问冲突。为什么?我怎么能解决这个问题?
c# - C# 有符号和无符号整数是双向窄化转换吗?
根据 MSDN 文章:https ://msdn.microsoft.com/en-us/library/8s682k58%28v=vs.80%29.aspx
一些编译器需要显式转换来支持缩小转换。
根据上述 msdn 链接中的陈述,可以肯定地说
将 int 转换为 uint 正在缩小转换范围
还,
将 uint 转换为 int 正在缩小转换范围
?