Tag: 铸造

在接口中进行Java转换

有人可以请我解释一下,编译器在第一次投射时没有抱怨,但是在第二次投诉呢? interface I1 { } interface I2 { } class C1 implements I1 { } class C2 implements I2 { } public class Test{ public static void main(){ C1 o1 = new C1(); C2 o2 = new C2(); Integer o3 = new Integer(4); I2 x = (I2)o1; //compiler does not complain I2 y = (I2)o3; […]

为什么将一个未使用的函数参数值转换为void?

在一些C项目中,我看到了这样的代码: static void *l_alloc (void *ud, void *ptr, size_t osize, size_t nsize) { (void)ud; (void)osize; /* some code not using `ud` or `osize` */ return ptr; } 这两个表决无效用于任何目的?

为什么这个铸造是多余的?

我有一个方法有以下重载: string Call(string function, Dictionary<string, object> parameters, object body) string Call(string function, Dictionary<string, object> parameters, JObject body) 现在我又增加了一个重载: string Call(string function) { return Call(function, null, (JObject) null); } 我向JObject添加了一个JObject以便编译器知道应该使用哪个超载。 但是,Visual Studio告诉我,演员是多余的。 但是为什么我的电话没有演员模糊呢?

(string)或.toString()?

我有一个Object o参数的方法。 在这个方法中,我完全知道在“o”中有一个不为null的String 。 没有必要检查,或者做别的事情。 我必须把它看作一个String对象。 只是好奇 – 什么更便宜 – 把它投到String ,或使用Object.toString() ? 还是按时间/ cpu- / mem-价格是相同的? 更新:该方法接受Object因为它是一个接口的实现。 没有办法改变参数types。 它不能为null 。 我只是想说,我不需要检查它是空的还是空的。 在我的情况下,总是有一个非空string。

为什么不能在Integer中inputstring?

我发现了一些奇怪的例外: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String 怎么可能? 每个对象都可以被转换成string,不是吗? 代码是: String myString = (String) myIntegerObject; 谢谢。

诠释在C#中Char

假定Int在有效值的范围内,将Int值转换为Utf16中相应的Char的最佳方法是什么?

演员可以明确吗?

当涉及到构造函数时,添加关键字explicit防止热心的编译器在不是程序员的第一意图时创build对象。 这样的机制是否也适用于铸造操作员? struct Foo { operator std::string() const; }; 在这里,例如,我希望能够将Foo投射到一个std::string ,但是我不希望这样的投射隐式发生。

在int中枚举枚举的通用方法

有没有一种通用的方式来int enum在C++ enum ? 如果int落在一个enum范围内,它应该返回一个enum值,否则抛出一个exception 。 有没有一种方法来一般地写? 应该支持多于一个enum type 。 背景:我有一个外部枚举types, 不能控制源代码。 我想将这个值存储在数据库中并检索它。

什么时候是一个整数< – >指针转换实际上是正确的?

民间传说说: types系统存在的原因。 整数和指针是不同的types,在大多数情况下铸造它们是一种弊端,可能表明devise错误,应该避免。 即使在执行这样的转换时,也不会对整数和指针的大小进行假设(将void*为int是使代码在x64上失败的最简单方法),而不是int应该使用intptr_t或uintptr_t stdint.h 。 知道什么时候执行这样的演员实际上是有用的 ? (注意:对可移植性的代价稍微短一点的代码并不算“实际上有用”)。 我知道的一个例子是: 一些无锁多处理器algorithm利用了2 + -byte-alligned指针有一些冗余的事实。 然后,他们使用指针的最低位作为布尔标志,例如。 使用具有适当指令集的处理器,这可以消除对locking机制的需要(如果指针和布尔标志是分离的,则这是必要的)。 (注意:这种做法甚至可以通过java.util.concurrent.atomic.AtomicMarkableReference在Java中安全地执行) 更多的东西?

'是'与尝试投与空检查

我注意到,Resharperbuild议我这样做: if (myObj.myProp is MyType) { … } 进入这个: var myObjRef = myObj.myProp as MyType; if (myObjRef != null) { … } 为什么会提出这种改变? 我已经习惯了Resharper提出的优化改变和代码缩减的改变,但是这感觉就像是想要把我的单一语句转换成双线程。 根据MSDN : 如果满足以下两个条件, 则 expression式的计算结果为true: expression式不为空。 expression式可以转换为types 。 也就是说,表单(type)(expression)强制转换(type)(expression)将会完成而不会引发exception。 我误读了,还是不是做了完全相同的检查,只是在一行中,而不需要显式创build另一个局部variables的空检查?