C++学习-入门到精通【19】杂项汇总

C++头文件汇总 ACM-ICPC模板 我的常用的优(冗)美(长)的头文件 首先在这里先写一个头文件博客是因为上面的 ACM-ICPC模板 里都没有写头文件,搬到这儿了 。 再下面是C++头文件汇总,比赛的时候万一要用了可以来对照一下 #include<cstdio> #include<cstring> #include<algorithm> //STL 通用算法 #include<iostream> #include<string> #inc 阅读详情

C++学习-入门到精通【19】杂项汇总



一、const_cast运算符

const_cast运算符可以强制去除const和volatile的限定,使得一个声明为const的变量可以被修改。注意,使用该运算符是一件危险的事,应该明确程序的确需要修改一个常变量的功能才使用它。该运算符并不会进行任何检查。

这里我们对比之前我们用到过的其他的一些强制转换运算符:static_cast、dynamic_cast和reinterpret_cast。

static_cast的工作是在编译时进行相关类型间的安全转换,同样也可以用于向下转换,但是安全必须由程序员来保证(也就是不进行运行时类型检查);
dynamic_cast的核心工作是在运行时进行多态类型的安全向下转换。会进行运行时类型检查,被转换的对象是否与要转换的目标类型相同,如果相同继续转换,不同则返回一个空指针;
reinterpret_cast进行低级别的比特位重新解释(最危险的转换),它的工作是进行任意指针间的转换,不会进行任何类型检查,且高度依赖于平台;
const_cast则是用于添加或移除const/volatile关键字;

下面给出一个使用const_cast的例子:

#include <iostream>
#include <cstring> // 包含C风格的字符串操作函数,比如strcmp,strcpy等等
#include <cctype> // 包含字符处理库,里面包含如isdigit之类的函数
using namespace std;

const char* maximum(const char* first, const char* second)
{
	return ((strcmp(first, second) >= 0) ? first : second);
}

int main()
{
	char s1[] = "hello";
	char s2[] = "goodbye";

	// 使用const_cast将一个const char*的类型转换成一个char*类型
	char *maxPtr = const_cast<char*>(maximum(s1, s2));

	cout << "The larger string is: " << maxPtr << endl;

	for (size_t i = 0; i < strlen(maxPtr); ++i)
	{
		maxPtr[i] = toupper(maxPtr[i]);
	}

	cout << "The larger string capitalized is: " << maxPtr << endl;
}

运行结果:

在这里插入图片描述

二、mutable类成员

该关键字大多数是用来修饰一个类的数据成员的,表示它永远可以被修改,即使它是一个声明为const的对象的数据成员,或是在调用一个声明为const的函数内部也可以进行修改。

示例代码:

#include <iostream>
using namespace std;

class TestMutable
{
public:
	TestMutable(int v = 0)
		:value(v)
	{

	}

	int getValue() const
	{
		return ++value;
	}
private:
	mutable int value;
};

int main()
{
	const TestMutable test(99);

	cout << "Initial value: " << test.getValue();
	cout << "\nModified value: " << test.getValue() << endl;
}

运行结果:

在这里插入图片描述

三、命名空间

一个程序可能会包含很多在不同范围内定义的标识符。有时一个范围的变量会与另一个范围中定义的同名变量发生“重叠”,从而引起一个命名上的冲突。

C++标准试图使用命名空间来解决这一问题。每个命名空间都定义了一个放置标识符和变量的范围。在使用一个命名空间时,每个成员的名字前必须加上一个命名空间名和二元作用域分辨运算符::来限定。例如:MyNameSpace::member;。
或者使用using指令。通常在那些会使用命名空间成员的文件的开始处使用这样的using语句。例如:using namespace MyNameSpace;。
它表明命名空间MyNameSpace中的成员可以在这个文件中直接使用,而不用在每个成员前面添加命名空间名和作用域分辨运算符。

也可以以如下形式来使用using指令:
using std::cout;
该语句将一个名字加入到指令出现的范围中。当使用cout时就不用在前面加上std::。
使用语句using namespace std;
会将命名空间std中的所有名字都带入到该指令所在的范围中。

注意并不是所有的命名空间都能保证唯一性,两个第三方提供的命名空间可能就存在同名的标识符。

定义一个命名空间

示例代码:

#include <iostream>
using namespace std;

int integer = 98; // 定义一个全局变量

// 使用关键字namespace创建一个命名空间
namespace Example
{
	const double PI = 3.14159;
	const double E = 2.71828;
	int integer = 8; // 与全局变量integer重名

	void printValues();

	// 定义一个内层命名空间
	namespace Inner
	{
		enum Years { FISCAL1 = 1900, FISCAL2, FISCAL3 };
	}
}

// 定义一个匿名命名空间
namespace
{
	double doubleInUnnamed = 88.88;
}

int main()
{
	cout << "doubleInUnnamed = " << doubleInUnnamed;

	cout << "\n(global) integer = " << integer;

	cout << "\nPI = " << Example::PI << "\nE = " << Example::E
		<< "\ninteger = " << Example::integer << "\nFISCAL3 = "
		<< Example::Inner::FISCAL3 << endl;

	Example::printValues();
}

void Example::printValues()
{
	cout << "\nIn printValues:\ninteger = " << integer 
		<< "\nPI = " << PI << "\nE = " << E
		<< "\n(global) integer = " << ::integer << "\nFISCAL3 = "
		<< Inner::FISCAL3 << endl;
}

运行结果:

在这里插入图片描述

一个命名空间可以由关键字namespace来进行定义。一个命名空间可以包含常量、变量、类、嵌套的命名空间、函数等等。

命名空间的定义必须出现在全局作用域中或是嵌套在其他命名空间之中。与类必须在同一个文件中完整连续定义不同,命名空间可以在不同的文件的命名空间中进行定义,编译器会自动将它们进行合并。对于标准库头文件,在这些文件的内部都包含一个名为std的命名空间块,所以我们在使用标准库头文件中的标识符时,可以使用using namespace std;来使用命名空间std中的名字,来减少冗余的作用域分辨运算符使用。

using指令不应该出现在头文件中

命名空间在使用很多类库的大规模应用程序中非常有用,所以在这种情况下,发生命名冲突的可能性就更大,在开发这种项目时,记得一定不要在头文件中使用using指令。否则会将相应的名字带入包含这个头文件的任何文件中,这就极其容易导致命名冲突发生,并产生微妙且难以发现的错误。

命名空间同样可以存在别名,例如:
namespace CPPHTP = CPlusPlusHowToProgram;
就是为命名空间CPlusPlusHowToProgram创建了一个命名空间别名CPPHTP。

四、指向类成员的指针

示例代码:

#include <iostream>
using namespace std;

// 创建一个Test类,
// 该类包含两个公有成员
// 一个成员函数,一个数据成员
class Test
{
public:
	void func()
	{
		cout << "In func\n";
	}

	int value;
};

void arrowStar(Test*);
void dotStar(Test*);

int main()
{
	Test test;
	test.value = 8;
	arrowStar(&test);
	dotStar(&test);
}

void arrowStar(Test* testPtr)
{
	// 声明一个函数指针,并使用该指针指向Test类中的成员函数func
	// 因为指针指向的对象是类中的成员,所以要在 * 前面指明作用域
	void (Test::*memberPtr)() = &Test::func;
	// 使用函数指针来调用成员函数
	// 要通过一个指针类成员的指针来访问类成员
	// 必须通过一个类的对象或类对象指针来使用该指针,前者使用.操作符,后者使用->操作符
	// *memberPtr可以看成是对一个指针的解引用,得到一个对象成员
	// 然后一个类对象或类对象指针要访问一个类成员,必须使用.或->操作符
	// 所以调用语句为obj.*memberPtr 或 objPtr->*memberPtr
	(testPtr->*memberPtr)();
}

void dotStar(Test* testPtr)
{
	int Test::*vPtr = &Test::value;
	cout << (*testPtr).*vPtr << endl;
}

运行结果:

在这里插入图片描述

注意,上面对于类成员的解释中*memberPtr实际上是一种错误的语法,仅仅是这样解释可能让人更容易理解。

与普通指针是一个内存中的绝对地址(虽然也不是,仅仅是对于该程序而言,它的位置可以说是绝对的)不同,指向类成员的指针是一个“偏移+访问规则”的语义标记,它必须与一个类对象组合才可以使用。

所以对一个类成员指针的使用.*或->*作为一个整体使用。

五、多重继承

在C++中一个可以从多个类派生出来,这种技术就被称为多重继承。

注意,在系统设计中要正确地使用多重继承必须格外小心,当单一的继承或组合可以解决问题时,不应该使用多重继承。

在使用多重继承时,最常见的一个问题就是,每个基类都可能包含了具有相同名字的数据成员或成员函数。这在编译时会导致二义性问题。

例如:

Base1.h

#pragma once
class Base1
{
public:
	Base1(int parameterValue)
		:value(parameterValue)
	{

	}

	int getData() const
	{
		return value;
	}

protected:
	int value;
};

Base2.h

#pragma once
class Base2
{
public:
	Base2(char characterData)
		:letter(characterData)
	{

	}

	char getData() const
	{
		return letter;
	}

protected:
	char letter;
};

Derived.h

#pragma once
#include "Base1.h"
#include "Base2.h"

#include <iostream>

class Derived : public Base1, public Base2
{
	friend std::ostream& operator<<(std::ostream&, const Derived&);
public:
	Derived(int, char, double);
	double getReal() const;
private:
	double real;
};

Derived.cpp

#include "Derived.h"
using namespace std;

Derived::Derived(int integer, char character, double double1)
	:Base1(integer), Base2(character),real(double1)
{

}

double Derived::getReal() const
{
	return real;
}

ostream& operator<<(ostream& output, const Derived& derived)
{
	output << "    Integer: " << derived.value
		<< "\n  Character: " << derived.letter
		<< "\nReal number: " << derived.real;
	return output;
}

从上面的示例代码中,大家应该都能看出,多重继承的语法其实是非常简单的,派生类的:后面跟上一个逗号分隔的基类列表。

各个基类构造函数的调用顺序是多重继承指定时的顺序,这里即Base1再到Base2,而不是在派生类的构造函数中它们被使用的顺序。

测试程序,test.cpp

#include "Derived.h"
using namespace std;

int main()
{
	Base1 base1(10);
	Base2 base2('B');
	Derived derived(7, 'A', 3.5);

	cout << "Object base1 contains integer " << base1.getData()
		<< "\nObject base2 contains character " << base2.getData()
		<< "\nObject derived contains:\n" << derived << "\n\n";

	cout << "Data members of Derived can be accessed individually:"
		<< "\n    Integer: " << derived.Base1::getData()
		<< "\n  Character: " << derived.Base2::getData()
		<< "\nReal number: " << derived.getReal() << "\n\n";
	cout << "Derived can be treated as an object of either base class:\n";

	Base1* base1Ptr = &derived;
	cout << "base1Ptr->getData() yields " << base1Ptr->getData() << "\n";

	Base2* base2Ptr = &derived;
	cout << "base2Ptr->getData() yields " << base2Ptr->getData() << "\n";
}

运行结果:

在这里插入图片描述

虽然,派生类Derived的两个基类中都有成员函数getData(),但是从结果上来看,=调用过程并不存在二义性。

对于一个派生类对象derived当它要调用getData函数时,是存在二义性问题,所以上面的代码中使用二元作用域分辨运算符指明了它们调用的函数的作用域。

六、多重继承和virtual基类

现在我们思考一下,关于标准库basic_iostream的定义,它是多重继承了basic_istream和basic_ostream两个类,且这两个类又都是从基类basic_ios中派生而来的。在多重继承的层次结构中,这样的继承关系被称为菱形继承。

在这里插入图片描述

因为类basic_istream和basic_ostream都是从类basic_ios继承而来,在类basic_iostream中就可能存在一个潜在的问题——类basic_iostream可能包含了类basic_ios成员的两个副本:一个通过继承basic_istream获得,另一个通过继承basic_ostream获得。

这里我们会使用virtual基类,来解决间接继承一个基类的多个副本的问题。

示例代码:

#include <iostream>
using namespace std;

class Base
{
public:
	// 定义一个纯虚函数
	virtual void print() const = 0;
};

class DerivedOne : public Base
{
public:
	virtual void print() const override
	{
		cout << "DerivedOne\n";
	}
};

class DerivedTwo : public Base
{
public:
	virtual void print() const override
	{
		cout << "DerivedTwo\n";
	}
};

class Multiple : public DerivedOne, public DerivedTwo
{
public:
	virtual void print() const override
	{
		DerivedTwo::print();
	}
};

int main()
{
	Multiple both;
	DerivedOne one;
	DerivedTwo two;
	Base* array[3];

	// array[0] = &both; // 错误声明
	array[1] = &one;
	array[2] = &two;

	for (int i = 1; i < 3; ++i)
	{
		array[i]->print();
	}
}

运行结果:

在这里插入图片描述

将代码改成下面展示的这样

#include <iostream>
using namespace std;

class Base
{
public:
	// 定义一个纯虚函数
	virtual void print() const = 0;
};

class DerivedOne : virtual public Base
{
public:
	virtual void print() const override
	{
		cout << "DerivedOne\n";
	}
};

class DerivedTwo : virtual public Base
{
public:
	virtual void print() const override
	{
		cout << "DerivedTwo\n";
	}
};

class Multiple : public DerivedOne, public DerivedTwo
{
public:
	virtual void print() const override
	{
		DerivedTwo::print();
	}
};

int main()
{
	Multiple both;
	DerivedOne one;
	DerivedTwo two;
	Base* array[3];

	 array[0] = &both; // 错误声明
	array[1] = &one;
	array[2] = &two;

	for (int i = 0; i < 3; ++i)
	{
		array[i]->print();
	}
}

运行结果:

在这里插入图片描述

上面两个版本的代码中唯一的不同在于两个从抽象基类中的继承的类是使用virtual的方式进行继承,即class DerivedOne : virtual public Base。

这个两个类均由类Base继承而来,它们都包含一个Base子对象。virtual继承的优点直到类Multiple继承两个类时才显现出来,因为这两个类都使用了virtual继承来继承基类Base的成员,所以编译器保证只有一个Base类的子对象继承到类Multiple中,这样就消除了编译器产生的二义性错误。

卫星图像检测,分割,跟踪,超分辨率,数据集调研,以及论文笔记 目标检测,针对物体有很多类如桥,烟囱,罐子等,有静态图像下的检测,也就是图像源头多来自谷歌地图,但是前后帧没有任何联系,并且谷歌地图相对来说比较清楚,难度小一点,也有粗粒度以及较细粒度的检测,然后卫星视频的数据集较少,则可以通过前后帧的联系来辅助检测,并且卫星帧基本上只对车,船,飞机,火车进行检测,没有进行细粒度的检测即将车辆分类为卡车,皮卡,小轿车,但是关船,则可以分类为货船以及军舰,因为目前的卫星视频中小车实在太少了,难以进行更细粒度的检测。luojia 三号卫星。 阅读详情

相关推荐

数据库原理及应用教程课后习题答案 第4版 微课版 陈志泊主编

数据库原理及应用教程 第4版 微课版 陈志泊主编 习题参考答案

共同学习,心怀感激。 5万+

盘点适合入门学习的C/C++开源项目

C 项目名称: C 项目简介: 是的,你没有看错,这个项目的名字就是单个字母C。C是一个宝藏项目,可以说是学习数据结构和刷算法题的利器,因为里面包含了几乎各种基础算法、数据结构、以及LeetCode算法题的C语言实现。具体包括: 客户端/服务器问题 统计方法问题 进制转换问题 各种数据结构:数组、链表、字典、二叉树、堆、栈、队列、哈希、图等等 搜索/查找问题 排序问题 LeetCode习题 其他杂项问题 注意,下图中只是截取了一部分数据结构和算法题的具体实现: 对于我们的作用: 可以帮助我们更好的学习数据

OceanStar的博客 3万+

用户存续期价值评估CLV(三) Gamma-Gamma模型 Python模拟

Gamma-Gamma模型 前面已经提到过,Pareto/NBD和BG/NBD模型只对客户存续时间和交易次数进行建模,并不涉及客户未来交易所带来的现金价值。 Gamma-Gamma模型就是对这个问题的一个扩展解决方案。 Gamma-Gamma模型做了如下假设: 从客户角度上来说,交易金额在每个客户的平均交易价值上随机波动。(这一点并不是很有说服力) 所观察到的交易价值均值是隐含价值均值 ????(????) 的非完美计量 交易价值均值在客户中是变化的,即使这个值是稳定的(这个假设非常大) 在客户中的平

weixin_43171270的博客 4368

在C++学习的过程中如何使每个 .cpp单独运行

在日常的学习中我们可能会在同一个项目下建立多个cpp文件进行C++的学习,如果要使每个cpp文件都可以单独运行,不会报错应该怎么做。 以下有两种方法可以解决: 方法一 将其他不需要运行的 .cpp文件中的main函数(主函数)全部注释掉。不需要运行的main函数全部注释掉,需要用到那个就解开那个的注释,非常方便。 ** 方法二 ** 弹出这样一个界面 点击这个V形字样的按钮 选择是即可 ...

qq_46906413的博客 8808

scrapy - 美团民宿 实战练习

目录结构 items.py import scrapy # 民俗名称,地区,价格,房间类型及数量,床的数量,可住几人 class MeituanItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title = scrapy.Field() place = scrapy.Field() price = scrapy.F...

小刘的博客 2664

应急响应之windows日志分析工具logparser使用

windows日志分析工具logparser使用介绍

u013930899的博客 8123

C编程从入门到精通——全方位编程学习资源

C#编程从入门到精通——全方位编程学习资源 去发现同类优质开源项目:https://gitcode.com/ 资源简介 《C#编程从入门到精通》是一本全面深入的C#编程学习资源,旨在帮助读者从基础入门到高级应用的全方位掌握C#编程语言。本书不仅适用于编程新手,同时也为有经验的程序员提供了丰富的实用例程和解决方案。 内容概述 本书由三大部分组成: 第一部分:C#入门教程 本部分通过12章内容,详细介...

gitblog_06785的博客 630

最优控制理论 二+、哈密尔顿函数法的补充

本章基于变分法所推出的哈密尔顿函数法,2、讨论了积分方程约束的转化、控制+状态等式约束的一阶必要条件。3、控制分段连续、状态存在内点约束等情况下的角点条件,给出了协态变量和哈密尔顿函数在内点处不连续的表达式。...

MSysの优快云 9394

推荐开源项目:CPP C++ Papyrus

推荐开源项目:CPP C++ Papyrus 项目介绍 CPP C++ Papyrus 是一个全面的C++编程资源库,由Caio Rodrigues Soares精心编撰和维护。这个开源项目旨在为开发者提供C++语言的核心概念、标准库、工具以及各种应用领域的实例代码和示例。无论你是初学者还是经验丰富的程序员,都能在这个项目中找到你需要的知识点和实践案例。 项目技术分析 该项目涵盖了C++的各个方面...

gitblog_00003的博客 920

STC32-USB-CAN:基于STC32G的国产双通道隔离CAN分析调试设备设计与实战

本文详细介绍了基于国产STC32G单片机设计双通道隔离CAN分析调试设备的全过程。该设备实现了双通道隔离CAN数据监控、中继转发及USB高速通信,并支持故障注入测试。核心采用全国产器件,通过实战测试验证了其在1Mbps波特率下长时间稳定工作的可靠性,为工程师提供了高性价比的CAN总线调试解决方案。

weixin_42465140的博客 97

MATLAB和S7-1200PLC水箱液位高度PID控制联合仿真(KEPserverOPC通信应用)

SMART PLC 向导PID的详细介绍请查看下面文章链接:S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-优快云博客文章浏览阅读1k次。这篇博客主要介绍SMART PLC PID向导的使用,PID控制相关的其它内容请查看专栏系列文章,常用链接如下:SMART PLC PID负压控制(过程量为负数)_负压控制pid控制程序_RXXW_Dor的博客-优快云博客1、如何实现PID反作用调节?S7-1200PLC和KEPserver OPC通信-优快云博客。

RXXW_Dor的博客 1781

C++基础之杂项

1> 格式 : [捕获列表](函数形参列表)[mutable] [->返回值类型]{函数体内容};2> 解析1、捕获列表:分为值捕获和引用捕获值捕获:值捕获时,表达式中的数据和外界的数据属于不同的数据,并且在非mutable的lambda表达式中值捕获数据可读不可写[变量1,变量2,。。。,变量n]:将这些数据都进行值捕获[=]:将外界的变量全部进行值捕获[=,&变量1,&变量2]:除了将变量1和变量2进行引用捕获外,其他都是值捕获。

没有百宝袋的哆啦A梦的博客 1996

YOLOv11改进策略【模型轻量化】| 替换华为的极简主义骨干网络:VanillaNet

本文记录的是基于VanillaNet的YOLOv11轻量化改进方法研究。VanillaNet的极简主义在于无 shortcut 连接,并且在网络的每个阶段仅使用一层卷积,无额外复杂模块,仅通过自身简洁的架构设计和训练策略,实现有效地训练和优化。本文在替换骨干网络中配置了原论文中的、和11种模型,以满足不同的需求。

Limiiiing的博客 1724

cpp的杂项

cpp的杂项杂项的bug和调试每一项都得专门去做,比较琐碎,所以罗列在这里。预处理器和编译器和c类似bug和调试断点监视点查看内存查看汇编代码预处理器和编译器#define#if define xxx #else #endif#ifndef xxx #define #endif字符串化 #define ABC(x) cout << #x拼接 #define FPRINT(x) f##x##print

逐梦如风-毕康 761

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++ Builder 杂项

C++ Builder 杂项_xxxl的专栏-优快云博客

weixin_39926429的博客 136

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++杂项(更新中)

C++学习笔记

qq_44955826的博客 1136

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

CPP杂项

1. 友元函数声明顺序非成员函数:需在类外提前声明函数,再在类内标记为友元。cpp复制// 前向声明// 正确:函数已声明void helper() { ... } // 实现直接定义在类内:无需提前声明,但视为隐式内联。cpp复制friend void helper() { ... } // 直接定义(隐式内联)易错点若未提前声明,友元函数可能被误认为新函数(导致链接错误)。2. 友元类声明顺序被友元的类(如B)需至少前向声明,再在目标类(如A)中标记为友元。

2302_79765203的博客 745

C++ 杂项

c++11引入了auto类型说明符,auto让编译器通过初始值来推算变量的类型,所以auto定义的变量必须有初始值,可以和范围for循环组合使用。 #include<iostream> using namespace std; int main() { string s("hello world"); for(auto c:s) c='t'; cout<<s<...

LIEY 1341

杂项-cpp

c++ 写完代码到能跑起来,要经过编译 链接 。我们的.cpp .h 被称为源代码,给人看的,机器现在还看不懂,所以需要编译器把源码转成机器能看懂的object file,最后由链接器把多个object file组合成一个exe可执行文件。在写编程中必然会遇到以下几类错误: 编译时错误(编译器找到的错误,eg:语法错误等) 链接时错误(eg:库冲突) 运行时错误(eg:逻辑错误)。一般来说 编

bai_lu_sz的专栏 701

C++杂项

一些C++的杂项,之前都没注意到的,自己记录一下 cmake 教程 cmake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。(摘自百度百科) cmake教程 上面的链接是我看到的比较好的新手教程,并且比较详细。 linux下cmake常用命令 常用命令 这是linux下的常用命令,有些的只有命令说明,没带参数,自己在使用的时候可以在去详细看具体命令

SosoDefficult的博客 387

C++重新入门-C++运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。

m0_63006478的博客 1085

C++中一些杂项

C++一些杂项补充

scott198512的博客 783

C++入门基础知识41——【关于C++ 运算符——杂项运算符】

C++入门基础知识41——【关于C++ 运算符——杂项运算符】

zhaoylzy的博客 355

C++学习笔记【七】—— 杂项运算符

C++运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 其中杂项运算符如下:

xiaodouhao123456的博客 319

C++ 杂项知识记录

C++ 杂项知识记录 各类C++杂项知识C++ 杂项知识记录1.前置处理符号1.1 #pragma once ————————————————————————————————————————————— 1.前置处理符号 1.1 #pragma once 在C和C++编程语言中,#pragma once是一个非标准但是被广泛支持的前置处理符号,会让所在的文件在一个单独的编译中只被包含一次。以此方式,#pragma once提供类似include防范的目的,但是拥有较少的代码且能避免名称的碰撞。 例如 //

J1nAB1n9的博客 390

c++ 杂项

-------------------------------------------------------------------------------- 1. 如何使类的成员函数作为回调函数 -------------------------------------------------------------------------------- c++成员函数需要传递this

hjjdebug的专栏 1188
上一篇: C++-入门到精通【18】string类和字符串流处理的深入剖析
YKPG
博客等级 码龄6年 344粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值