常量表示方法不同

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. Ajax制作无刷新评论系统

    index.html <script src="jquery.min.js"></script> <script> $(function(){ ...

  2. skynet配置文件

    启动skynet需要一个配置文件 我们看下examples/config root = "./"         表示根目录是skynet启动时的目录thread = 8     ...

  3. Codeforces 293B

    Codeforces 293B 原题 题目描述:给出一个\(n \times m\)的网格, 给定一个整数\(k\),网格上的每个数都不超过\(k\),其中有的格子是\(0\),要求把这些格子变成\( ...

  4. GNU/Linux Distribution Timeline v12.10

    GNU/Linux Distribution Timeline v12.10 原图下载 GNULinux Distribution Timeline 12.10.png GNU/Linux Distr ...

  5. warning C4133: “函数”: 从“char [5]”到“LPCWSTR”的类型不兼容

    弹窗打开一个网页,但是报错,代码如下: #include <stdio.h> #include <windows.h> void main() { ShellExecute(, ...

  6. Boost环境配置及遇到的问题解决方案

    1.模块/工具简介 Boost库是一个跨平台,开源并且完全免费的C++库,内容涵盖字符串处理.正则表达式.容器与数据结构.并发编程.函数式编程.泛型编程.设计模式实现等许多领域,使得实际的开发更加灵活 ...

  7. gcc中-pthread和-lpthread的区别

    最近在使用linux mint15,里面自带的gcc时4.7的,当我编译多线程程序时,使用-lpthread居然说没有找到线程库函数!!!然后man了一下,才发现在gcc 4.7中链接线程库使用-pt ...

  8. 固定cell.imageView.image的大小

    cell.imageView.image的大小 会随着Cell的高度而变化,不同的图片显示的也不一样,在网上找了几种方法,简单方便的是下面这种: UIImage *icon = [UIImage im ...

  9. 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值

    实验说明 (1)正向传值:比如A类里地值要传给B类用,就是我们先在A类中声明一个B类对象(当然B类头文件要import过来),然后把A类中得某个 值传递给B类中得某个值(所以需要在B类中先准备一个变量 ...

  10. 依赖注入及AOP简述(十二)——依赖注入对象的行为增强(AOP) .

    四.依赖注入对象的行为增强(AOP) 前面讲到,依赖注入框架的最鲜明的特点就是能够提供受容器管理的依赖对象,并且可以对对象提供行为增强(AOP)功能,所以这一章我们来讨论有关AOP的话题. 1.    ...