C++语法 C++ 关键字

C++语法 C++ 关键字

C++ 关键字auto

总述:
auto的原理就是根据后面的值,来自己推测前面的类型是什么。
auto的作用就是为了简化变量初始化,如果这个变量有一个很长很长的初始化类型,就可以用auto代替。

注意点:
1.用auto声明的变量必须初始化(auto是根据后面的值来推测这个变量的类型,如果后面没有值,自然会报错)
2.函数和模板参数不能被声明为auto(原因同上)
3.因为auto是一个占位符,并不是一个他自己的类型,因此不能用于类型转换或其他一些操作,如sizeof和typeid
4.定义在一个auto序列的变量必须始终推导成同一类型
auto x1 = 5, x2 = 5.0, x3=‘r’; // This is too much…we cannot combine like this
C++ for (auto &it:myset) &是什么意思
加了&代表引用,如果不加,则是值拷贝

for循环
auto 自动识别类型

for (auto & it : lst) 这句话什么意思?
这个叫做自动迭代器:表示遍历lst这个集合,每次的迭代的其中一个元素是it(auto表示自动推测类型)

C++ 关键字constexpr

constexpr 限定符
constexpr是C++11中新增的关键字,其语义是“常量表达式”,也就是在编译期可求值的表达式。最基础的常量表达式就是字面值或全局变量/函数的地址或sizeof等关键字返回的结果,而其它常量表达式都是由基础表达式通过各种确定的运算得到的。constexpr值可用于enum、switch、数组长度等场合。

声明为constexpr的变量一定是一个const变量,而且必须用常量表达式初始化:

constexpr int mf = 20; //20是常量表达式
constexpr int limit = mf + 1; // mf + 1是常量表达式
constexpr int sz = size(); //之后当size是一个constexpr函数时才是一条正确的声明语句

C++ 关键字 class 类

C++中使用关键字 class 来定义类, 其基本形式如下:
class类名
{
public:
//行为或属性
protected:
//行为或属性
private:
//行为或属性
};
示例:
定义一个点(Point)类, 具有以下属性和方法:
■ 属性: x坐标, y坐标
■ 方法: 1.设置x,y的坐标值; 2.输出坐标的信息。

C++ 关键字declspec

内存对齐__declspec( align(#) )

C++符号 :

函数后面加“:”的含义
1、c++成员函数后面跟“:”表示的是赋值,这是c++的特性

C++关键字final

使用final关键字修饰的类,表示这个类不能够被继承,否则将会编译报错。

C++ 关键字 模板template

一、函数模板
template< class 形参名,class 形参名,…> 返回类型 函数名(参数列表) { 函数体 }
举个例子:template void swap(T& a,T& b){}

当调用这样的模板函数时,类型T就会被调用时的类型所代替。如果swap(a, b),a,b都是int类型,那么模板函数swap中的形参T就会被int所代替,模板函数就会变成swap(int &a,int &b)。而当swap(a,b),a,b都是double类型,那么模板函数swap中的形参T就会被double所代替,模板函数就会变成swap(double &a,double &b),这样如果我们的程序中交换变量的值就不再受限于类型了。

二、类模板
template< class 形参名,class 形参名,…> class 类名 {…};
举个例子:template class A { public: T a; T b; T hy(T c, T &d); };
在类A中声明了两个类型为T的成员变量a和b,还声明了一个返回类型为T带两个参数类型为T的函数hy。

声明类模板时要增加一行
template <class 类型参数名>
template意思是“模板”,是声明类模板时必须写的关键字。在template后面的尖括号内的内容为模板的参数表列,关键字class表示其后面的是类型参数。在本例中numtype就是一个类型参数名。这个名宇是可以任意取的,只要是合法的标识符即可。这里取numtype只是表示“数据类型”的意思而已。此时,mimtype并不是一个已存在的实际类型名,它只是一个虚拟类型参数名。在以后将被一个实际的类型名取代。

  1. 原有的类型名int换成虚拟类型参数名numtype。
    在建立类对象时,如果将实际类型指定为int型,编译系统就会用int取代所有的numtype,如果指定为float型,就用float取代所有的numtype。这样就能实现“一类多用”。

由于类模板包含类型参数,因此又称为参数化的类。如果说类是对象的抽象,对象是类的实例,则类模板是类的抽象,类是类模板的实例。 利用类模板可以建立含各种数据类型的类。

可以这样声明和使用类模板:

  1. 先写出一个实际的类。由于其语义明确,含义清楚,一般不会出错。

  2. 将此类中准备改变的类型名(如int要改变为float或char)改用一个自己指定的虚拟类型名(如上例中的numtype)。

  3. 在类声明前面加入一行,格式为:
    template <class 虚拟类型参数>
    如:
    template //注意本行末尾无分号
    class Compare
    {…}; //类体

  4. 用类模板定义对象时用以下形式:
    类模板名<实际类型名> 对象名;
    类模板名<实际类型名> 对象名(实参表列);
    如:
    Compare cmp;
    Compare cmp(3,7);

  5. 如果在类模板外定义成员函数,应写成类模板形式:
    template <class 虚拟类型参数>
    函数类型 类模板名<虚拟类型参数>::成员函数名(函数形参表列) {…}

C++关键字this

this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。
所谓当前对象,是指正在使用的对象。例如对于stu.show();,stu 就是当前对象,this 就指向 stu。

关于this指针的一个经典回答:
当你进入一个房子后,你可以看见桌子、椅子、地板等,  
但是房子你是看不到全貌了。

对于一个类的实例来说,  
你可以看到它的成员函数、成员变量,  
但是实例本身呢?  
this是一个指针,它时时刻刻指向你这个实例本身

  1. 类的this指针有以下特点:
    (1)this只能在成员函数中使用。
    全局函数、静态函数都不能使用this.

在C++里面,每一个对象都能通过this指针来访问自己的地址。
this是所有成员函数的隐藏参数

用法:
在C++中,当成员函数中某个变量与成员变量名字相同,则使用this关键字来表示成员变量。
或者,需要返回类变量或者结构体变量的时候,使用this关键字。

1.什么是this
先要理解class的意思,class应该理解为一种类型,象int,char一样,是用户自定义的类型。(虽然比int char这样build-in类型复杂的多,但首先要理解它们一样是类型)。用这个类型可以来声明一个变量,比如int x, myclass my等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my的this 就是指向my的指针。如果还有一个变量myclass mz,mz的this就是指向mz的指针,对其的解引用*this就应该是一个myclass类型的变量。如果有成员函数被调用,比如a.sum(),则sum函数可以通过隐形形参this来访问a,所以this是被调用对象访问调用他的对象的工具,可以理解为this指向调用他的对象。默认情况下,this的类型是指向类类型非常量的常量指针,所以默认情况下,初始化时,我们不能把this绑定到一个常量对象上去,因此,在参数列表的后面加上 const 修改this的属性,让其可以指向一个常量对象,可以增加函数的灵活性,这个成员函数也叫常量成员函数

  1. this指针的常见使用地方
    a:在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;
    b:另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n);
    c:在class定义时要用到类型变量自身时,因为这时候还不知道变量名,就用this这样的指针来使用变量自身。

C++ 关键字using

使用using起别名,相当于传统的typedef起别名。
typedef std::vector intvec;
using intvec = std::vector; //这两个写法是等价的

C++ 关键字new

new运算符使用的一般格式为
new 类型 [初值]
“new”是C++的一个关键字,它通常用来在堆上创建数组或对象,它会返回这个对象的指针。

C++ 关键字 typename

"typename"是一个C++程序设计语言中的关键字。当用于泛型编程时是另一术语"class"的同义词。这个关键字用于指出模板声明(或定义)中的非独立名称(dependent names)是类型名,而非变量名。
我们经常会这么用 typename,这是一项C++编程语言的泛型编程(或曰“模板编程”)的功能,typename关键字用于引入一个模板参数。

template
const T& max(const T& x, const T& y)
{
if (y < x) {
return x;
}
return y;
}
在模板定义语法中关键字 class 与 typename 的作用完全一样

template
const T& max(const T& x, const T& y)
{
if (y < x) {
return x;
}
return y;
}

    而使用 typename 的作用就是告诉 c++ 编译器,typename 后面的字符串为一个类型名称,而不是成员函数或者成员变量,这个时候如果前面没有 typename,编译器没有任何办法知道 T::LengthType 是一个类型还是一个成员名称(静态数据成员或者静态函数),所以编译不能够通过。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值