当前位置:网站首页 / C++ / 正文

AY的VS2019 的C++11笔记[4]

时间:2020年07月07日 | 作者 : aaronyang | 分类 : C++ | 浏览: 952次 | 评论 0


表达式这块,跟C#基本一致,不一样的我列出,

比如 *beg++

auto beg=v.begin();

while(beg!=v.end() && *beg>0){

cout<<*beg++<<endl;

}

取值,并且移动指针位置到下一个对象。

等价于*(beg++)

cout<<*beg<<endl;

++beg;


这种写法很常见



位运算符C#也有,不常用,容易忘

& 有0就0

| 有1就1

^ 相同为0,不同为1

一开始的cout和cin用到了  <<和>>




sizeof运算符

sizeof(类型)

sizeof 对象名


比如数组大小获得

constexpr size_t sz= sizeof(ia)/sizeof(*ia)

整个数组大小除以单个


image.png




隐式转换

C#差不多,重复的不写了

特别的:

 int a[10];

int* aptr=a; //aptr是数组a的首元素的指针


还有非常量的 转换为常量,但是相反不行

int i;

const int &j=i;

const int* p=&i;


显式转换

C#都是(类型)实例名转换


提供了

 static_cast

 dynamic_cast

 const_cast

 reinterpret_cast


任何具有明确定义的类型转换,只要不包含const

int i,j;

double s=static_cast<double>(j) / i;

image.png

	double d = 5;
	void* p = &d;
	double* dp = static_cast<double*>(p);
	*dp = 100;
	cout << *dp << endl;

image.png

void* 指针的全局类型,类似auto,类似C#的var,js的var




const_cast 只能改变运算对象的底层const,常常用于有函数重载的上下文中

	const char* c;
	char* p = const_cast<char*>(c);//但是通过p写值是未定义的行为
	static_cast<string>(c);//正确
	const_cast<string>(c)//错误 只改变常量属性


reinterpret_cast,这玩意 本质依赖机器,尽量少用

为运算对象的位模式提供较低层次上的重新编译


尽量少用强制转换。

旧式的强制类型转换为

	int* ip;
	char* pc = reinterpret_cast<char*>(ip);
	char* pc = (char*)ip;//旧式


C++的双冒号是全局

关于成员选择,-> 类似于C#的. 点号

->* 或者 .* 指向成员选择的指针



其他的跟C#差不多。

 AYUI       www.ayjs.net      AY         杨洋原创编写,请不要转载谢谢




关于语句,都和C#一样

while,if,else,switch case,for,do while,break,continue,

他的for循环有个 范围的

vector<int> v={1,2,3};

for(auto &r:v){}这种

当然还有前面讲的 迭代器begin(),end()那个


关于goto语句,C#也有,

goto label:

end:return;

goto end;


begin:

 XXXXXXX

XXXXX

goto begin;

不建议用goto语句


异常语句

try{}catch(runtime_error error){ err.what(); }


异常类型,

exception

runtime_error 只有在运行时才能检测出的问题

range_error

overflow_error 计算上溢

underflow_error 计算下溢

logic_error

domain_error 参数对应的值不存在

invalid_argument

length_error 试图创建一个超出该类型最大长度的对象

out_of_range


bad_alloc和bad_cast


异常返回 e.what()函数,返回一个C风格字符串的const char* 文本信息

编译器决定



为何C++不提供“finally”结构

因为C++提供了另一种 机制,完全可以取代finally,而且这种机制几乎总要比finally工作得更好:就是——“分配资源即初始化”。

在C++中通常使用RAII,即Resource Aquisition Is Initialization.

就是将资源封装成一个类,将资源的初始化封装在构造函数里,释放封装在析构函数里。要在局部使用资源的时候,就实例化一个local object。

在抛出异常的时候,由于local object脱离了作用域,自动调用析构函数,会保证资源被释放















推荐您阅读更多有关于“C++,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音:wpfui 工作wpf,目前主maui

招聘合肥一枚WPF工程师,跟我一个开发组,10-15K,欢迎打扰

目前在合肥市企迈科技就职

AYUI8全源码 Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始学习WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

标签列表