四、新的关键字

原创 2017年01月03日 00:42:54

一、动态类型分配(c中用库函数实现,c++中用关键字)

(1).动态内存分配用new关键字
(2).删除用delete关键字

#include<stdio.h>
int main()
{
    int *p1 = new int;
    char *p = new char[10];
    *p1 = 5;
    p[0] = 'a';
    printf("%d\n",*p1);
    printf("%c\n",p[0]);
    delete p1;//一定要记得释放
    delete[] p;//注意释放的方法不一样
    getchar();
    return 0;
}

(3).new与malloc函数的区别:
new关键字是c++的一部分,malloc是由c库提供的函数
new 以具体类型为单位进行内存分配,malloc只能以字节为单位进行内存分配
new 在申请单个类型变量的时候可以进行初始化,malloc不具备内存初始化的特性

#include<stdio.h>
int main()
{
    char *p = new char('c');
    int *p1 = new int(3);
    printf("%c\n",*p);//打印字符c
    printf("%d",*p1);//打印3
    delete p;//最后要记得释放
    delete p1;
    getchar();
    return 0;
}

二、c++中的命名空间

(1).在C语言中只有一个全局作用域,所以的全局标识符共享一个作用域,标识符之间可能发生冲突
(2).c++中提出命名空间的概念:
命名空间将全局作用域分成不同的部分,不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以互相嵌套
全局作用域也叫默认空间命名(c原来的全局作用域)
(3).c++命名空间的定义:
namespace name{}

(4).如何使用命名空间里面的东西?
使用整个命名空间: using namespace name;
使用命名空间中的变量:using name::variable;
使用默认命名空间的变量(即没有名字的命名空间): ::variable;

#include<iostream>
using namespace std;
namespace first
{
    namespace four
    {
        int i = 5;
        int b = 9;
    }

}
namespace second
{
    namespace third
    {
        int x=6;
        int y=7;
    }
}
int a = 2;
int main()
{

    using namespace first::four;
    using second::third::x;//注意使用某个变量时不需要namespace
    printf("%d\n", ::a);//使用默认命名空间
    printf("%d\n",i);//four 命名空间已经被打开,里面的东西都可以用
    printf("%d\n", b);//four 命名空间已经被打开,里面的东西都可以用
    printf("%d\n",x);
    //printf("%d\n", y);//会报错,因为y没有打开被使用
    getchar();
    return 0;
}

三、强制类型转换

1.c方式的强制类型转换:(Type)(expression)或Type(expression)两者无本质区别
c转换的问题:
(1).过于粗暴:任意类型的都可以转换,编译器难以判断
(2).难以定位:在源码中无法快速定位所有使用的强制类型转换的语句

2.c++将强制类型转换分成四种不同类型(static_cast、const_cast、dynamic_cast、reinterpret_cast。c++将这四个变成自己的关键字)
(1).static_cast:
a. 用于基本类型间的转换,但不能用于基本类型指针的转换(int to char)
b. 用于有继承关系类对象之间的转换和类指针之间的转换
c. static_cast是编译期进行转换的,无法在运行时检查类型,所以类型
之间的转换可能存在风险

#include<stdio.h>
int main()
{
    int i = 97;
    char c;
    int *p1 = &i;
    char *p2;
    c = static_cast<char>(i);
    //p2 = static_cast<char *>(p1);//报错,基本类型的指针无法转换
    printf("%c\n",c);
    getchar();
    return 0;
}

(2).const_cast:用于去除变量的const属性,用于指针或者引用

#include<stdio.h>
int main()
{
    const int& j = 2;//之前在const引用那里讲过,这里为为常量分配了空间,只读变量
    int& k = const_cast<int&>(j);//去掉只读变量的特性
    k = 3;
    printf("%d\n",j);//打印的值都是3
    printf("%d\n",k);
    getchar();
    return 0;
}
#include<stdio.h>
int main()
{
    const int j = 2;
    int& k = const_cast<int&>(j);//去掉常量的特性
    k = 3;
    printf("%d\n",j);//打印的值都是2
    printf("%d\n",k);//打印的值是3
    //原因:j是常量,在符号表里,即使为它分配了地址,也不用里面的值
    getchar();
    return 0;
}

(3).reinterpret_cast:
用于指针间的强制类型转换
用于整数和指针类型的强制类型转换

#include<stdio.h>
int main()
{
    int j = 97;
    int *p1 = &j;
    char *p2;
    p2 = reinterpret_cast<char*>(p1);//用于指针类型的转换
    printf("%c\n",*p2);
    getchar();
    return 0;
}

(4).dynamic_cast:
主要用于类层次间的转换,还可以用于类之间的交叉转换
具有类型检查功能,比static_cast安全

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【七】C++一些新的关键字 -- new、delete、强制类型转换

1、动态内存分配C++中的动态内存分配已经和C语言有了明显区别: C++中通过new关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 delete关键字用于内存释放   变量申请和释放...
  • CMbug
  • CMbug
  • 2015-08-23 14:55
  • 962

c++基础学习5-c++新关键字

1,动态内存分配

温故而知新:Java volatile 关键字

关于volatile 我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前,Java的...

c++学习笔记(4.c++中新的关键字)

本节知识点: 1.关键字new与delete: a.c++中通过new关键字进行动态内存分配,new是一种基于类型进行的内存分配,同时c++使用delete进行内存释放 单个变量内存...

初试Scrapy(四)—抓取和讯论坛关键字搜索的结果

初试Scrapy(四)—抓取和讯论坛关键字搜索的结果本来按照计划这篇文章是要讲一讲Scrapy框架中的Spider Middleware,后来有个学金融的朋友说要我帮忙抓取下和讯论坛中通过关键字搜索正...

C++学习笔记9 C++新的关键字

1:动态内存分配: C++中通过new关键字进行

UWP win10 app 新关键字x:Bing

原本使用MVVM开发,我们使用数据绑定是x:Binging 新的关键字x:Bing使用和原来x:Binging区别不大。 优点是性能提升,强类型,可以在编译找出类型不同的错误

C# 5.0 两个新关键字 async await 在Silverlight中的应用

去年8月发布的最新版 .NET Framework 4.5 支持 C# 5.0中两个新的关键字:async, await 这两个关键字能极大的简化传统的C# 异步函数代码: 我们先来看看在Silv...

java笔记(四)[java中的import关键词&java中的javadoc用法及注释说明&java中的final关键字&java中的内部类详解]

1、 • import关键词的使用除了导入包外还可以导入静态方法和静态成员变量 2、 • 关于使用/** */生成javadoc的方法,在commend window 中转移到java文件的目录下,...

Java学习笔记四-Java的循环结构和分支结构以及break,continue关键字

1. 关于Java的循环结构和分支结构代码里最常用的除了各种基类, 就是循环结构和分支结构了, 和C语言一样, 因为代码是顺序执行的, 所以为了多次执行, 或者选择执行时就有了循环结构和分支结构. ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)