Tag: 隐式转换

静态隐式运算符

我最近发现这个代码: public static implicit operator XElement(XmlBase xmlBase) { return xmlBase.Xml; } static implicit operator是什么意思?

为什么printf(“%f”,0); 给未定义的行为?

语句printf("%f\n",0.0f); 打印0。 但是,语句printf("%f\n",0); 打印随机值。 我意识到我正在展示某种不确定的行为,但是我无法弄清楚为什么特别。 所有位都是0的float值仍然是一个有效值为0的float 。 float和int在我的机器上是相同的大小(如果甚至是相关的)。 为什么在printf中使用整数文字而不是浮点文字会导致这种行为?

“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); }; //Test sample class Base {}; […]

我们可以在c#中定义枚举的隐式转换吗?

是否有可能定义隐式转换的枚举在C#? 有什么可以做到这一点? public enum MyEnum { one = 1, two = 2 } MyEnum number = MyEnum.one; long i = number; 如果没有,为什么不呢? 有关这方面的进一步讨论和想法,我跟随我如何处理这个: 改进C#枚举

为什么我可以传递1作为一个简短的,而不是我的intvariables?

为什么第一个和第二个写入工作,但不是最后一个? 有没有办法,我可以允许所有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!? } }

隐式运算符使用接口

我有一个generics类,我试图实现隐式types铸造。 虽然它主要工作,它不会用于接口铸造。 经过进一步调查,我发现有一个编译器错误:“用户定义从接口转换”适用。 虽然我明白在某些情况下应该强制执行,但我想要做的似乎是合法的情况。 这是一个例子: public class Foo<T> where T : IBar { private readonly T instance; public Foo(T instance) { this.instance = instance; } public T Instance { get { return instance; } } public static implicit operator Foo<T>(T instance) { return new Foo<T>(instance); } } 代码使用它: var concreteReferenceToBar = new ConcreteBar(); IBar intefaceReferenceToBar […]

是否保证新的Integer(i)==我在Java?

考虑下面的代码片段: int i = 99999999; byte b = 99; short s = 9999; Integer ii = Integer.valueOf(9); // should be within cache System.out.println(new Integer(i) == i); // "true" System.out.println(new Integer(b) == b); // "true" System.out.println(new Integer(s) == s); // "true" System.out.println(new Integer(ii) == ii); // "false" 这很明显,为什么最后一行总是打印"false" :我们正在使用==引用标识比较,并且一个new对象将永远不会==到一个已经存在的对象。 问题是关于前3行:这些比较保证在原始int ,与Integer自动拆箱? 有没有原始的情况下将自动盒,而参考身份比较是执行? (这将是false !)

“operator bool()const”是什么意思?

例如: operator bool() const { return col != 0; } col是一个int。 operator bool() const如何工作?

通过将string隐式转换为对象时,重载parsing失败

免责声明:我知道应该避免隐式转换为string,并且适当的方法将是对Person的op<< 。 考虑下面的代码: #include <string> #include <ostream> #include <iostream> struct NameType { operator std::string() { return "wobble"; } }; struct Person { NameType name; }; int main() { std::cout << std::string("bobble"); std::cout << "wibble"; Person p; std::cout << p.name; } 它在GCC 4.3.4上产生以下结果 : prog.cpp: In function 'int main()': prog.cpp:18: error: no match for 'operator<<' in […]

C中的双指针const正确性警告

指向非const数据的指针可以隐式转换为指向相同types的const数据的指针: int *x = NULL; int const *y = x; 添加额外的const限定符以匹配额外的间接参数应该在逻辑上以相同的方式工作: int * *x = NULL; int *const *y = x; /* okay */ int const *const *z = y; /* warning */ 然而,用GCC或Clang编译这个与-Wall标志,会导致以下警告: test.c:4:23: warning: initializing 'int const *const *' with an expression of type 'int *const *' discards qualifiers in nested pointer types […]