logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

C++:杂记(代码编译器、初始化,C++17的一个特性)

说到这些天,我深感要做到一个专业的C++程序员,我感觉还有更长路要走。有些焦虑不已,但不管是直接询问大佬的意见,还是看各种公众号文章,普遍给我的感觉是:要注重基础,所以我又重新啃C++之父的那本《C++程序设计语言》4版本了。在阅读中也有些新的感悟,记录于此。

文章图片
#c++#开发语言
C++进阶:具有多个代码文件的程序

当编译器运行到main 函数第 5 行的add函数调用时,它并不知道add是什么,因为我们直到第 9 行才定义add!我们的解决方案是重新排序函数(将add放在最前面),或者对add使用前向声明。提醒:对于A函数中调用B函数,B函数调用A函数的例子,重新排序将失去其效用,而前向声明可以忽略掉函数声明的前后顺序,只要保证其在函数调用前面就行,但是在复杂的程序中,我们需要花很多精力去看排列函数的顺序才

文章图片
#c++#开发语言
C++基础:整数范围以及溢出测试---避免使用无符号类型

为了确定特定机器上数据类型的大小,C++ 提供了一个名为 的运算符sizeof。sizeof运算符是一个一元运算符,它接受一个类型或一个变量作为参数,并返回该类型对象的大小(以字节为单位)。

文章图片
#c++#开发语言
C++进阶:使用普通函数重载算数运算符

将头文件Fraction.h的具体实现放入到Fration.cpp中,最好包含Fraction.h,表示结构上关系的清晰(不引入自会编译器自会寻找),再包含进所用到的头文件。具体操作:将34~64行放入Fration.cpp中,因为求两数最大公约数的std::gcd是文件中的,也用到了std::cout,所以和也#include 进去。剩下的就是main.cpp 了,将Fraction.h包含进来

文章图片
#c++#开发语言
C++进阶:swtich语句特殊的作用域

输出结果如下,加上嵌入块之后,由于case 1,case 2和case 3 之间共有的作用域被分割,而变量y在case 1语句块末尾被销毁后就不能使用,所以当匹配到case 2 中的变量y时,编译器会告诉你y在这个作用域未声明。在if语句中如果程序员没有在 if statement或者else statement 声明块,编译器将隐式声明一个。然而作为同为控制流语句(选择语句)的switch语句并

文章图片
#c++#开发语言
C++基础:函数重载

因为函数print(‘a’)调用的a是一个char类型,它匹配到了print(int ) 和print(double)两个函数,而char是以ascill码存在的,其char->int属于是整型提升,代价相比于char -> double这种整数和浮点数之间的转换,它会选择转换代价更小的char->int整型提升。注意:对于不能用返回类型来区分函数重载,这是故意的,因为这涉及到函数返回的类型的用法

文章图片
#c++#开发语言
C++进阶:使用友元函数重载算术运算符

非显式Fraction(int, int)构造函数将用于从 2构造一个新的Fraction。然后使用运算符Fraction * Fraction将​​这个新的Fraction 与f1相乘。因为这需要转换2为Fraction,所以这比使用整数乘法的重载运算符的实现稍微慢一些。为什么使用显式构造函数?

文章图片
#c++#开发语言
C++进阶:普通函数, 友元函数, 成员函数重载运算符.

不能. operator<<(作为全局函数)通过接收一个 std::ostream&(非const引用)类型的参数来修改左操作数。如果是const ostream& , std::cout << " hello, " << “world!您还可以更改流的标志,例如,当您输入无效内容并std::cin进入失败状态时.:reduce()函数是化简用的,调用了标准库里的std::gcd(m_numera

文章图片
#c++#开发语言
C++进阶:重载下标运算符[]

我们使用数组时,通常使用下标运算符([])来索引数组的特定元素,但我们常用的自定义类型(结构struct,类class,枚举enum等)却不像数组那样有内置的下标运算符,所以我们需要重载下标运算符[].

文章图片
#c++#开发语言
C++进阶:重载括号()运算符

其他运算符都不能改变参数数量和类型,括号运算符 (operator()) 是一个特别有趣的运算符,因为它允许您同时改变其参数的类型和数量。

文章图片
#c++#开发语言
    共 27 条
  • 1
  • 2
  • 3
  • 请选择