Questions tagged «implicit-conversion»

将对象,变量或值从一种类型转换为另一种类型以满足类型限制,而无需通过语言语法特别要求进行转换。

2
Scala在哪里寻找隐式?
一个隐含的新人Scala的问题似乎是:在哪里呢编译器找implicits?我的意思是隐含的,因为这个问题似乎从来没有完全形成,就好像没有言语。:-)例如,integral下面的值从哪里来? scala> import scala.math._ import scala.math._ scala> def foo[T](t: T)(implicit integral: Integral[T]) {println(integral)} foo: [T](t: T)(implicit integral: scala.math.Integral[T])Unit scala> foo(0) scala.math.Numeric$IntIsIntegral$@3dbea611 scala> foo(0L) scala.math.Numeric$LongIsIntegral$@48c610af 决定学习第一个问题的答案的另一个问题是,在某些明显的模棱两可的情况下,编译器如何选择要使用的隐式变量(无论如何还是要编译)? 例如,scala.Predef定义了两次转换String:从到WrappedString,再到到StringOps。但是,这两个类共享许多方法,所以为什么Scala在调用时不抱怨歧义map? 注意:这个问题是由另一个问题启发而来的,希望以更笼统的方式说明问题。该示例是从那里复制的,因为答案中已提及该示例。

4
Objective-C隐式转换将整数精度'NSUInteger'(aka'unsigned long')转换为'int'警告
我正在做一些练习,并收到警告,指出: 隐式转换将失去整数精度:将'NSUInteger'(aka'unsigned long')转换为'int' #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { NSArray *myColors; int i; int count; myColors = @[@"Red", @"Green", @"Blue", @"Yellow"]; count = myColors.count; // <<< issue warning here for (i = 0; i < count; i++) NSLog (@"Element %i = %@", i, …


7
为什么我可以将1传递为short而不传递int变量i?
为什么第一个和第二个Write起作用而最后一个不起作用?有没有一种方法可以让我全部允许3个人,并检测它是否为1,(int)1或我传入?真的为什么允许一个,但最后一个呢?第二个被允许,但最后一个没有被我震惊。 演示以显示编译错误 using System; class Program { public static void Write(short v) { } static void Main(string[] args) { Write(1);//ok Write((int)1);//ok int i=1; Write(i);//error!? } }


5
is_base_of是如何工作的?
以下代码如何工作? typedef char (&yes)[1]; typedef char (&no)[2]; template <typename B, typename D> struct Host { operator B*() const; operator D*(); }; template <typename B, typename D> struct is_base_of { template <typename T> static yes check(D*, T); static no check(B*, int); static const bool value = sizeof(check(Host<B,D>(), int())) == sizeof(yes); }; …

2
防止函数使用const std :: string&接受0
值一千字: #include<string> #include<iostream> class SayWhat { public: SayWhat& operator[](const std::string& s) { std::cout<<"here\n"; // To make sure we fail on function entry std::cout<<s<<"\n"; return *this; } }; int main() { SayWhat ohNo; // ohNo[1]; // Does not compile. Logic prevails. ohNo[0]; // you didn't! this compiles. return 0; } 将数字0传递给接受字符串的方括号运算符时,编译器不会抱怨。相反,它会在输入以下方法之前编译并失败: …

3
隐式转换与类型类
在Scala中,我们可以至少使用两种方法来改造现有或新类型。假设我们要表示可以使用来量化某些内容Int。我们可以定义以下特征。 隐式转换 trait Quantifiable{ def quantify: Int } 然后我们可以使用隐式转换来量化例如字符串和列表。 implicit def string2quant(s: String) = new Quantifiable{ def quantify = s.size } implicit def list2quantifiable[A](l: List[A]) = new Quantifiable{ val quantify = l.size } 导入这些之后,我们可以quantify在字符串和列表上调用该方法。请注意,可量化列表存储其长度,因此避免了后续调用时列表的昂贵遍历quantify。 类型类别 另一种方法是定义一个“见证” Quantified[A],声明A可以对某种类型进行量化。 trait Quantified[A] { def quantify(a: A): Int } 然后,我们提供这种类型的类的实例String和List地方。 implicit val stringQuantifiable = …


10
为什么printf(“%f”,0); 给未定义的行为?
该声明 printf("%f\n",0.0f); 打印0。 但是,声明 printf("%f\n",0); 打印随机值。 我意识到我表现出某种不确定的行为,但我不知道具体为什么。 所有位均为0的浮点值仍然是有效的float,值为0。 float并且int在我的计算机上具有相同的大小(如果相关)。 为什么使用整数文字而不是浮点文字printf会导致此行为? PS如果我使用可以看到相同的行为 int i = 0; printf("%f\n", i);

3
如何在Scala中链接隐式函数?
pimp-my-library模式允许我通过在类中隐式转换为实现该方法的隐式转换,从而在类中似乎添加了一种方法。 斯卡拉不允许两个这样的隐式转换正在发生,但是,我不能得到A到C使用隐含A于B和另一个隐含的B对C。有没有办法解决这个限制?

2
隐式类型提升规则
这篇文章旨在用作有关C语言中隐式整数提升的FAQ,尤其是由通常的算术转换和/或整数提升引起的隐式提升。 示例1) 为什么给出一个奇怪的大整数而不是255? unsigned char x = 0; unsigned char y = 1; printf("%u\n", x - y); 示例2) 为什么给出“ -1大于0”? unsigned int a = 1; signed int b = -2; if(a + b > 0) puts("-1 is larger than 0"); 示例3) 为什么在上面的示例中更改类型以short解决问题? unsigned short a = 1; signed short b …

8
为什么C ++允许我将const char分配给const char * ?!
令我惊讶的是,它汇编为: const char* c_str() { static const char nullchar = '\0'; return nullchar; } 并且在我的代码中引入了一个错误。幸运的是,我抓住了它。 这是C ++故意还是编译器错误?是否有理由主动忽略数据类型? 它可以在Visual C ++ 2010和GCC中工作,但是鉴于明显的数据类型不匹配,我不明白为什么它应该工作。(static也没有必要。)

4
不允许隐式转换返回
#include <optional> bool f() { std::optional<int> opt; return opt; } 无法编译: 'return': cannot convert from 'std::optional<int>' to 'bool' 咨询参考本来可以找到解释的,但我读了应该可以。 每当在上下文中使用某种类型T1的表达式但不接受该类型但接受某种其他类型的T2时,都会执行隐式转换。特别是: 当调用以T2作为参数声明的函数时,将表达式用作参数时; 当表达式用作期望T2的运算符的操作数时; 初始化类型为T2的新对象时,包括返回T2的函数中的return语句; 当在switch语句中使用该表达式时(T2是整数类型); 在if语句或循环中使用该表达式时(T2为bool)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.