zoukankan      html  css  js  c++  java
  • C# 与 C++,语法差别有多小-第三章 C++数据类型 第一部分

    一,数据类型

    C++: char  int short  long float double, unsigned 

    long double(128位,19位有效数字),

    wchar_t,

    浮点型文字常量在缺省情况下被认为是 double 型,单精度文字s常量 由值后面的 f 或 F 来标示,

    L'a' 这称为宽字符文字 类型为 wchar_t 宽字符常量用来支持某些语言的字符集合 如汉语 日语 这些语言中的某些字符不能用单个字符来表示

    C#: char  int  short  long float double  uint  ulong ushort 

    decimal 128 位精确的十进制值,28-29 有效位,可以认为与long double类似,float 7位有效数字 double 15位 decimal 28位

    sbyte 8位有符号整数

    bool 

    byte8 位无符号整数

    二、关键字

    C++:

    bool break case catch char class const Continue default do double else enum extern false float for goto if int long namespace new operator private protected public return short static struct switch this throw true try using virtual void volatile while sizeof  

    asm delete 

    转换 const_cast  reinterpret_cast static_cast dynamic_cast 

    变量 unsigned register  signed wchar_t auto  

    函数 friend inline union 

    运算符 typeid 

    宏定义 typedef 

    泛型 typename export (没用)

    多线程 mutable 

    explicit :构造函数

    C#:

    bool break case catch char class const continue default do double else enum extern false float for goto if int long namespace new operator private protected 

    public return short static struct switch this throw true try using virtual void volatile while sizeof 

    类和函数的修饰:abstract as base delegate event interface object override sealed 

    变量:byte decimal null  string  uint ulong ushort  sbyte 

    异常:finally fixed (基本不用) unchecked checked 

    循环:foreach in 

    多线程:lock

    运算符:typeof  is  

    转换:implicit  explicit 强制显式转换

    指针:stackalloc  int* block = stackalloc int[100];=_alloca。unsafe 

    访问控制: internal ref out  readonly 

    可变长数组:params 一.参数数组必须是一维数组  二.不允许将params修饰符与ref和out修饰符组合起来使用   三.与参数数组对应的实参可以是同一类型的数组名,也可以是任意多个与该数组的元素属于同一类型的变量  四.若实参是数组则按引用传递,若实参是变量或表达式则按值传递 五.形式为:方法修饰符 返回类型 方法名(params 类型[ ] 变量名)六.params参数必须是参数表的最后一个参数

     三、变量初始化

    C++:

    如果一个变量是在全 局域 global scope 内定义的 那么系统会保证给它提供初始值 0 在本例中 salary wage month day year 以及 distance 都被初始化为 0 因为它们都是在全局域内定义的 如果变 量是在局部域 local scope 内定义的 或是通过 new 表达式动态分配的 则系统不会向它 提供初始值 0 这些对象被称为是未初始化的 uninitialized 未

    C#:

    对于value-type的变量,默认值与value-type的默认构造函数计算的值相同。

    对于reference-type的变量,默认值为null。
    初始化为默认值通常通过让内存管理器或垃圾收集器在分配使用之前将内存初始化为所有位为零来完成。
    因此,使用all-bits-zero来表示空引用是很方便的。
    而值类型的默认值就是0

    四、变量赋值

    C++:

    在隐式形式中 初始值被放在括号中 int ival( 1024 ); string project( "Fantasia 2001" );

    C#:

    没有这玩意

    五:指针

    C++:有

    C#:没有

    五、字符串:

    C++:简直就是垃圾 strlen strcmp strcpy三大流氓 const char *st = "The expense of spirit "; string st( "The expense of spirit " );const char *str = s1.c_str(); /

    C#:超级好用

    六、Const

    C++:它把一个对象转换成一个常量 constant | const double pi; // 错误: 未初始化的常量

    const int value = 3;

    const int* ptr = &value; ptr是指向常量的指针,不可改变内容 const int* ptr=const int(* ptr)

    int* const ptr = &value;ptr是常量指针,不可改变指向  int * const ptr = int (* const ptr) 

    *和自己右边的部分结合

    C#:

    public const int C1 = 5;

    readonly 关键字与 const 关键字不同。const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数,如下面的代码行所示:

    复制代码代码如下:
    public static readonly uint l1 = (uint)datetime.now.ticks;
    这个readonly才是有病

    const修饰的常量没有内存消耗;readonly因为需要保存常量,所以有内存消耗

    const只能修饰基元类型、枚举类、或者字符串类型;readonly却没有这个限制

    static readonly 晕

    7.static 保留节目

    这个static 在C++和C#里面完全是风牛马不相及的东西

     

     7.引用类型

    C++: &符号  int ival = 1024, ival2 = 2048; int &rval = ival

    C#:对象类型默认为引用类型 ,对于值类型 用ref

  • 相关阅读:
    Android&读取Sdcard中的歌曲,ListView操作
    委托从数据库出来的类型分类处理
    分类信息网站
    Managed DirectX +C# 开发(入门篇)(二)
    ZedGraph控件的使用属性和例子代码
    【转】 c#ZedGraph 控件属性
    ZedGraph
    基于Visual C#的DirectX开发实例教程
    C#常用开源类库收集
    狄更斯《双城记》开场白
  • 原文地址:https://www.cnblogs.com/gaoxianzhi/p/11950444.html
Copyright © 2011-2022 走看看