tinytracer

  • 实践
    • CTF
    • 项目实践
  • 技术
    • C++
    • 逆向与汇编
    • 区块链安全
  • 探索
    • OWASP汉化
    • SQL
    • Kali
C++
C++

Effective Modern C++之旅——剖析auto变量

auto大法好 使用auto不仅可以少打些字,还能阻止那些由于手动指定型别带来的潜在错误和性能问题。另外,某些auto型别推导的结果在编程者的视角看起来是错误的,因此,有必要知道如何去引导auto推导出正确的结果。 我们从一段“天真无邪”的代码引入 int x; x忘记初始化了,所以它的值是不确定的,不过也不一定,它有可能被初始化为0。一切全看具体语境。 再来看一段不那么“天真”的代码 template<typename It> void dwim(It b, It e) { while(b != e)…

2018年6月9日 0条评论 1446点热度 0人点赞 Chernobyl 阅读全文
C++

Effective Modern C++之旅——探索编译器型别推导

掌握查看型别类型推导结果的方法 IDE编辑器 IDE中的代码编辑器通常会在你将鼠标指针悬停至某个程序实体,如变量、形参、函数等,会提示该实体的型别。例如下面的代码: const int exp = 42; auto x = exp; auto y = &exp; IDE会告诉你,x的型别是int,y是const int *。IDE推导类型的工作原理是让C++编译器(至少也是其前端)在IDE内执行一轮。如果该编译器不能在分析你的代码是得到足够的信息,自然也就无法得出型别推导的结果。对于像int这种内置的型别,…

2018年6月8日 0条评论 1332点热度 0人点赞 Chernobyl 阅读全文
C++

Effective Modern C++之旅——decltype探幽

理解decltype 在C++中,对于给定的变量或表达式,decltype能够告诉你变量或表达式的型别。大部分情况下,它告诉你的结果和你预测的是一致的,不过偶尔也会有一些“非正常”情况,让你面对推导结果时抓耳挠腮。 先从一般的情况讲起——那些不会引发意外的案例 const int i = 0;//decltype(i)是const int bool f(const Widget& i);//decltype(w)是const Widget&,decltype(f)是bool(*)(const Wid…

2018年6月7日 0条评论 1505点热度 0人点赞 Chernobyl 阅读全文
C++

Effective Modern C++之旅——auto型别推导

理解auto型别推导 如果你已经了解了有关模版型别推导的规则,那么你已经基本了解有关auto型别推导了,因为auto型别推导除了一种特殊情况外,其他与模板型别推导并无二致,它们之间确实也存在双向的算法变换。 在模版型别推导一章中,编译器会利用传入参数来推导模版参数的型别以实例化模版函数 template<typename T> void f(T param); f(expr); 当某变量使用auto来声明时,auto就扮演了模版中的T这个角色,而变量类型扮演的是expr。下面的代码展现了这种有趣的映射关…

2018年6月7日 0条评论 1485点热度 0人点赞 Chernobyl 阅读全文
C++

Effective modern C++之旅——模版型别推导

模版型别推导 函数模版大致形如 template<typename T> void f(ParamType param); 模版函数的调用形如 f(expr); 在编译期,编译器会通过expr推导两个类别。一个是T的类别,一个是ParamType的类别。由于ParamType常包含修饰词(如const T&),ParamType的类别可能会与T类别不同。 T的类别推导结果和传递给函数的实参类型不一定相同。T的类别推导结果,不仅仅与expr类型有关,还与ParamType的形式有关。分为以下三种情…

2018年6月7日 0条评论 1611点热度 0人点赞 Chernobyl 阅读全文
C++

C++学习-函数

递归 -递归函数调用自己,则被调用的函数也将调用自己,这将无限循环下去,除非代码包含终止调用链的内容 { statement 1; if(a>0) recurs(a-1); statement 2; } 解析:只要if语句为true,每个recurs调用将执行statement 1,然后再调用recurs,而不会执行statement 2。当if语句为false时,当前调用将执行statement 2,然后结束并返回之前的函数,执行statement 2,以此类推 函数头 函数头由3部分组成,如: int m…

2017年8月29日 0条评论 1586点热度 0人点赞 Chernobyl 阅读全文
C++

C++学习-存储的持续性与作用域

自动存储 在默认情况下,在函数中声明的函数参数和变量存储类型为auto,作用域为局部。 如果在代码块中定义了变量,则该变量的存在时间和作用域被为代码块 在函数体内部代码块中声明与代码块外部名称相同变量时,程序执行到代码块内部时将该变量解释为局部代码块变量,新的定义隐藏了旧的定义。程序离开代码块时,原来的定义重新可见 全局声明的auto变量具有外部链接性,两个源文件中不能声明同名称的全局auto变量 使用extern关键字引用同名外部变量 //1.cpp int t = 5; int main() { ... } /…

2017年8月29日 0条评论 1235点热度 0人点赞 Chernobyl 阅读全文
C++

C++学习-类

类与对象 类的定义 类支持用户自定义数据类型,使用关键字class,类体用{}界定,以;结束 class a { public: int b; a(int b, char c, long d); protected: char c; private: long d; } 类的成员包括函数成员和数据成员。定义类的目的是对某种类型的实体进行处理 在类的定义中,实体的属性是数据形式,即类的数据成员;实体的行为、功能或者对类中的数据成员进行操作称作方法,被表示为函数 类的数据成员在定义类体中,形式为:数据类型 成员名; 类…

2017年8月29日 0条评论 1513点热度 0人点赞 Chernobyl 阅读全文
C++

C++学习-I/O

流和缓冲区概念 C++把输入和谁出看作字节流。输入时,程序从输入流中抽取字节;输出时程序将字节插入输出流中。字节为构成数值或字符的二进制表示。 C++处理字节流的步骤为 将输入流、输出流与标准输入/输出关联 在内存中创建缓冲区,从输入流中读取字节放入内存中 缓冲区满或检测到特定输入(如回车)刷新缓冲区,同时将内存中的字节流通过输出流传入文件 处理字节流的常用类 ios_base:表示流的一般特征,如是否可读取、是二进制流还是文本等 ios:继承自ios_base,包括一个指向streambuf对象的指针 ostre…

2017年8月29日 0条评论 1507点热度 0人点赞 Chernobyl 阅读全文
C++

C++学习-杂项

RTTI(运行阶段类型识别) RTTI可在程序运行过程中动态地识别基类指针/引用所指向的类对象(派生类or基类) 全局示例代码: class a{...}; a* biu class b : public a{......} b* test class c : public b{......} c RTTI运算符: dynamic_cast: 使用示例: type * pm = dynamic_cast<type*> (item) 如 b* test; c*pm = dynamic_cast<c*…

2017年8月29日 0条评论 1346点热度 0人点赞 Chernobyl 阅读全文

COPYRIGHT © 2024 tinytracer. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang