常量表示方法不同

C不支持引用,C++支持

注释不同,C89不支持单行注释

(++i)++在C中不合法

(a=3)=4在C中不合法

不能在for循环头部定义变量

C++注重类型,强类型,严格检查类型

C类型检查不明确

//在C可以编译,在C++无法编译

//1>main.cpp(10): error C2440: “=”: 无法从“double *”转换为“int *”

//1> main.cpp(10): note: 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

 #include <stdio.h>
#include <stdlib.h> void main()
{
int *p1 = NULL; double *p2 = NULL; p1 = p2;//在C可以编译,在C++无法编译 //1>main.cpp(10) : error C2440 : “ = ” : 无法从“double *”转换为“int *”
// 1> main.cpp(10) : note : 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换 system("pause");
}

适用于宽字符串

wchar_t

std::wcout

 #include <iostream>
using namespace std; void main()
{
char *str("china");//字符串
wchar_t *str1(L"china");//宽字符串 std::cout << str << std::endl;
std::wcout << str1 << std::endl; system("pause");
}

//C++检测到右值在内存有实体,自动转换为左值

//C不会把右值转换为左值

(a = 3) = 4;

 #include <iostream>
using namespace std; //C++检测到右值在内存有实体,自动转换为左值 void main()
{
int a = ; std::cout << a << std::endl;// (a = ) = ; std::cout << a << std::endl;// system("pause");
}

((a > b) ? a : b) = 2;

 #include <iostream>
using namespace std; void main()
{
int a = ;
int b = ; std::cout << a << " " << b << std::endl;//3 5 ((a > b) ? a : b) = ; std::cout << a << " " << b << std::endl;//3 2 system("pause");
}

(++a)++;

 #include <iostream>
using namespace std; void main()
{
int a = ; std::cout << a << std::endl;// (++a)++; std::cout << a << std::endl;// system("pause");
}

//C全局变量有声明与定义的差别
//C++全局变量没有声明与定义的差别

//error C2086: “int a”: 重定义

 #include <iostream>
using namespace std; //C全局变量有声明与定义的差别
//C++全局变量没有声明与定义的差别 int a;//error C2086: “int a”: 重定义
int a;
int a;
int a; void main()
{ system("pause");
}

//C静态全局变量有声明与定义的差别
//C++静态全局变量没有声明与定义的差别

//error C2086: “int a”: 重定义

 #include <iostream>
using namespace std; //C静态全局变量有声明与定义的差别
//C++静态全局变量没有声明与定义的差别 static int a;//error C2086: “int a”: 重定义
static int a;
static int a;
static int a; void main()
{ system("pause");
}

//register在C++编译器做了优化,如果检测到取地址,就不会把它放到寄存器

 #include <iostream>
using namespace std; //register在C++编译器做了优化,如果检测到取地址,就不会把它放到寄存器 void main()
{
register int num(); std::cout << &num << std::endl; system("pause");
}

//C++编译宽泛
//为了修改源代码,后面留下拓展
//留空,用于占位

void test(int a, double, int)
{
std::cout << a << std::endl;
}

 #include <iostream>
using namespace std; //C++编译宽泛
//为了修改源代码,后面留下拓展
//留空,用于占位 void test(int a, double, int)
{
std::cout << a << std::endl;
} void main()
{
test(, 2.9, );// system("pause");
}

随机推荐

  1. python 通过ntlm验证下载文件

    最近使用python实现一个小工具,需要从网站下载文件,下载时服务端需要进行ntlm验证,否则返回401错误响应.经研究 requests库配合 requests-ntlm 可以解决这个问题. ntl ...

  2. Promise原理 && 简单实现

    Promise原理 参考https://github.com/chunpu/promise/blob/master/promise.js 个人认为原博的实现有点问题 在next函数的实现上, 会导致无 ...

  3. 正则语言(转的 大额_skylar )

    备注:正则表达式真的很头疼,收集起来,用起来很方便的. 常用的元字符 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或 ...

  4. liunx下NetworkManager导致网卡不能启动

    前几天在客户现场,配置一台系统为redhat 6.0的服务器,这台服务器是IBM x3755,系统是预装的.在把服务器的IP地址配置完成后,使用命令不能启动网卡.提示:弹出界面 eht0:错误:激活链 ...

  5. jQuery学习-事件之绑定事件(七)

    今天来说说事件中的handlers方法中的一个片段  1 matches[ sel ] = handleObj.needsContext ?  2     jQuery( sel, this ).in ...

  6. 解决:“Ubuntu 10.04 LTS _Lucid Lynx_ - Release i38...

    编译android源码,找不到g++.通过apt-get下载时候,总是提示“Ubuntu 10.04 LTS _Lucid Lynx_ - Release i386 (20100429)” 的盘片插入 ...

  7. Qt新建线程的方法(四种办法,很详细,有截图)

    看了不少Qt线程的东西,下面总结一下Qt新建一个线程的方法. 一.继承QThread 继承QThread,这应该是最常用的方法了.我们可以通过重写虚函数void QThread::run ()实现我们 ...

  8. WPF中图形表示语法详解(Path之Data属性语法)

    原文 http://blog.csdn.net/johnsuna/article/details/1885597 老规矩,看图说话. 先看显示效果:(图1) XAML(代码A):<Page xm ...

  9. rsyslog 读日志文件 ,当rsyslog 中断时,也会丢数据

    rsyslog 日志服务器: [root@dr-mysql01 winfae_log]# grep scan0819 wj-proxy01-catalina.out.2016-08-19 [root@ ...

  10. 只有电信3G是公网ip。

    只有电信3G是公网ip,其它网络拿到是内部网.