标签: implicit-conversion

为什么C++ 0x不支持隐式转换?

为什么C++ 0x不支持用户定义类型即对象的隐式转换?是否有任何项目实际使用此(错误)功能?每当我在代码中看到单个参数构造函数时,我就会进行检查或修改,我将其视为bug并使其明确.到目前为止,它运作良好,没有人抱怨.

谢谢.

编辑:让我引用STL的创建者Alex Stepanov:

打开您的C++书籍并阅读有关显式关键字的内容!请求您的邻居C++标准委员会成员最终取消隐含的转换.有一个常见的误解,通常由应该更清楚的人传播,STL依赖于隐含的转换.不是这样!

参考:A.Stepanov.C++笔记

再次编辑:不,没有辩论.我只是好奇是否有人在他们的工作中使用隐式转换.我从未见过任何允许隐式转换对象的项目.我认真思考并且没有任何假设的场景,隐式转换不会成为雷区.我的意思是C++单个参数转换,而不是从C继承的float-> double或类似转换

implicit-conversion c++11

0
推荐指数
1
解决办法
255
查看次数

为什么我不能重载operator =?

我想让以下代码工作:

Mylist lst;
vector<int> v = lst;
Run Code Online (Sandbox Code Playgroud)

所以我看到我需要将列表转换为矢量.我试过这段代码:

vector<int> operator=(vector<int> v, const List & l) {
    return v; // more profound stuff later :-)
}
Run Code Online (Sandbox Code Playgroud)

(把它放在课外).不幸的是Visual Studio抛出了我:"错误:'operator ='必须是成员函数".我不明白 - 我该怎么办?我不能把这个功能放在矢量类中......你可以帮帮我吗?谢谢!

c++ operator-overloading assignment-operator implicit-conversion operator-keyword

0
推荐指数
1
解决办法
233
查看次数

C#使用转换运算符进行转换

我有一个字符串类的自定义实现.我在字符串和类之间添加了自定义转换运算符,并且转换正常.但是,如果我首先将自定义对象转换为System.Object然后转换为字符串,则说:"无法将类型'MyString'强制转换为'System.String'".这是为什么?我怎样才能启用它...

class MyString
{
    public string S {get; set;}

    public MyString(string s)
    {
        this.S = s;
    }

    public static implicit operator string(MyString s)
    {
        return s.S;
    }
    public static implicit operator MyString(string s)
    {
        return new MyString(s);
    }
}

class Program
{
    static void Main(string[] args)
    {
        MyString ms = new MyString("a");
        string s = ms;
        object o = ms;
        string s1 = (string)o; // <-- this throws the exception!
    }
}
Run Code Online (Sandbox Code Playgroud)

c# casting implicit-conversion

0
推荐指数
1
解决办法
240
查看次数

int和string之间没有隐式转换

当我尝试执行这个belo代码时,我收到了这个错误.

//码:

 int Value = Convert.ToInt32(Request.QueryString["Value"] == null ? 0 : Request.QueryString["Value"]);
Run Code Online (Sandbox Code Playgroud)

所以如果QueryString值为null,我需要传递值'0' .

我怎么解决这个问题?

.net c# implicit-conversion

0
推荐指数
1
解决办法
1210
查看次数

C#中继承的奇怪行为

我对C#很新,所以我希望如果我的问题听起来很愚蠢请原谅我的无知.

-我尝试Inheritance用丰达C#,发现它在一些奇怪的行为方式,所以我想用检查出来Java,我得到了我的预期的结果.

-我只是想知道这里有什么我想念的.......

C#代码:

 class Animal
 {
   public void Sound()
   {
     System.Console.WriteLine("I don't make any sound");
   }


 } 





 class Dog : Animal
 {
   public void Sound()
   {
     System.Console.WriteLine("barking");


   }  

 }


 class InheritTest
 {
   static void Main()
   {
     Animal a = new Dog();         // Implicit conversion

     Dog    d = (Dog) a;   // Explicit conversion


     a.Sound();
     d.Sound();

   }

 }
Run Code Online (Sandbox Code Playgroud)

输出:

I don't make any sound
barking
Run Code Online (Sandbox Code Playgroud)

JAVA代码:

 class Animal
 {
   public void sound()
   { …
Run Code Online (Sandbox Code Playgroud)

c# java inheritance implicit-conversion explicit-conversion

0
推荐指数
1
解决办法
83
查看次数

不清楚为什么我的范围内隐含转换不被接受为"隐含证据"

我一直在尝试隐式转换,而且我对使用这些转换的'enrich-my-libray'模式有了很好的理解.我试图将我对基本隐含的理解与隐含证据的使用结合起来......但我误解了一些关键的东西,如下面的方法所示:

import scala.language.implicitConversions

object Moo extends App {

  case class FooInt(i: Int)
  implicit def cvtInt(i: Int) : FooInt = FooInt(i)
  implicit def cvtFoo(f: FooInt) : Int = f.i

  class Pair[T, S](var first: T, var second: S) {
    def swap(implicit ev: T =:= S, ev2: S =:= T) {
      val temp = first
      first = second
      second = temp
    }

    def dump() = {
      println("first is " + first)
      println("second is " + second)
    }
  }

  val x  = new Pair(FooInt(200), …
Run Code Online (Sandbox Code Playgroud)

scala typeclass implicit-conversion implicits

0
推荐指数
1
解决办法
81
查看次数

"return db.SaveChangesAsync()"和"return 0"之间有所不同

我想在向数据库添加新消息后获得状态.我定义了一个枚举(类型int),但是当我调用时,该方法给了我2条错误消息return await db.SaveChangesAsync();

无法将类型'xxx.Models.MessageStatus'隐式转换为'int'.

无法将类型'int'隐式转换为'xxx.Models.MessageStatus'.

我的测试代码:

enum MessageStatus
{
   Success,
   Failure
}

private async Task<MessageStatus> AddMessage()
{
   using (var db = new VinaChanelDbContext())
   {
      try
      {
          //do stuff...

          await db.SaveChangesAsync();
          return MessageStatus.Success; /* or return 0; */
       }
       catch { return 1; /* or return MessageStatus.Failure; */ }
   }
}
Run Code Online (Sandbox Code Playgroud)

MSDN doc说:

SaveChangesAsync()将返回 Task<int>

所以,我的问题是:为什么AddMessage方法不接受

/* implicit conversion to MessageStatus.Success or MessageStatus.Failure */
return await db.SaveChangesAsync(); 
Run Code Online (Sandbox Code Playgroud)

c# enums implicit-conversion

0
推荐指数
1
解决办法
943
查看次数

C#使自动ToString转换无效

在C#中,我有一个类:

public class Person
{
    public string name;
    public int id;
}
Run Code Online (Sandbox Code Playgroud)

目前,当我这样做时:

Person person = new Person
{
    name = "John",
    id = 3
}
// Will be converted Console.Writeline("Person = " + person.ToString()); by the compiler
Console.Writeline("Person = " + person); 
Run Code Online (Sandbox Code Playgroud)

我可以在类中做什么来使从人到人的自动转换无效.ToString()并使编译器给出一个错误来指示Person对象不能隐式转换为字符串?

c# tostring implicit-conversion

0
推荐指数
1
解决办法
105
查看次数

C#语言语法不一致

我正在学习C#并遇到一些让我对它的语法感到不舒服的事情.

情况1

byte num1 = 10;    // works
int ten = 10;
byte num2 = ten;   // Compile error: Cannot implicitly convert 'int' to byte. An explicit conversion exists.
Run Code Online (Sandbox Code Playgroud)

在第一个语句中,编译器隐式地将文字10(类型为int)强制转换为byte,相反,它在第三个语句中不执行相同操作.

案例2

int[] numbers1 = { 10, 20, 30 };     // works
int[] numbers2;
numbers2 = { 10, 20, 30 };          // Compiler error: Invalid expression term: {
Run Code Online (Sandbox Code Playgroud)

上面缩短的数组初始化程序在每个语句中都不起作用.

而且可能还有更多这样的不一致......

似乎错误版本是正确的,因为它们是按照定义的语法,非错误版本(对于类似的情况)是语言创建的构造,只是使语言易于编码.

但是在我们使用它的每个地方仍然不一致吗?

c# language-design implicit-conversion

0
推荐指数
1
解决办法
183
查看次数

文字中的隐式转换

默认情况下,Java假定您使用文字定义int值.

short x = 20; // There is an implicit conversion
Run Code Online (Sandbox Code Playgroud)

但是当我们在算术表达式中使用"x"变量时,例如:

short y = x * 2; //DOES NOT COMPILE
Run Code Online (Sandbox Code Playgroud)

我们知道20*2的结果是40,可以很容易地拟合成一个短变量.到底是怎么回事?

java literals implicit-conversion

0
推荐指数
1
解决办法
87
查看次数