C++-必知必会_模板局部特化(条款47)

小模型推理增强:轻量级强化学习实战指南 小语言模型(Small LLMs)在边缘设备、IoT和嵌入式场景中面临核心矛盾:需具备多步逻辑推理能力,却受限于算力、显存与延迟。传统监督微调(SFT)仅拟合输出模板,缺乏对推理过程的动态调控;而标准RLHF又过于沉重,难以适配0.5B–7B参数量级模型。强化学习在此的价值在于提供token级过程奖励机制,使模型学会‘如何一步步思考’而非‘该答什么’——通过规则驱动的稀疏奖励、IA³参数高效微调与PPO轻量化改造,可在单卡A10上实现推理链稳定性提升、跨提示鲁棒性增强及端到端延迟优化。本文聚焦Reinfor 阅读详情
/***********************************************
 *    模板局部特化
 *
 *          首先要声明的是,C++还不支持对函数模板的局部特化,
 *    所以此处我们只讨论类模板的局部特化.
 *          我们依然首先需要一个主模板.(参考类模板显式特化) 
 *    自我理解:
 *          如果针对不能的指针定义不同的完全特化,岂不是太麻
 *    烦了,有没有更好的办法呢?那就是局部特化了.(例1)
 *    提示:
 *         局部特化它是一个模板.完全特化不是一样模板.
**********************************************
*/

//例1
/***********************************************
 *    局部特化  
 *          和完全特化不同,这里的Heap参数类型只是被部分的确
 *    定为T*,而T是一个未指定的类型,这就是为什么说它是局部
 *    特化的原因;
 *          当使用一个未经任何修饰的指针类型来实例化Heap时,
 *    局部特化将优先于主模板;
 *          当使用const char * 或 char *(参考类模板显式特化)来
 *    实例化Heap时,此时完全特化又会优先于局部特化.
 *    Heap<std::string> h1;    主模板    T是std::string
 *    Heap<std::string *> h2;    局部特化    T是std:string
 *    Heap<int **> h3;        局部特化 T是int *
 *    Heap<char *> h4;    完全特化 T是char *
 *    Heap<const int *> h5;    局部特化 T是const int
 *    Heap<int (*)()> h6;    局部特化 T是int()
**********************************************
*/

template 
<typename T>
class Heap<T *> //注意这里
{
private:
    std::vector
<T *>h_;
public:
    
void push(const T *val);
    T 
*pop();
    
bool empty()
    
{
        
return h_.empty();
    }

}
;

template 
<typename T>
void Heap<T *>::push(const T *val)
{
    
//......
}


//例2
/***********************************************
 *          有一点很微妙但很有用:主模板的完全特化或局部特化
 *    必须采用与主模板相同数量和类型的实参进行实例化,但它
 *    的模板的参数并不需要具有和主模板相同的形式.
**********************************************
*/

//定义一个模板,有三个模板参数,书写形式如下
template <typename R,typename A1,typename A2> 
//注意,局部特化中,模板参数也是三个,但书写形式可不一样喽
class Heap<R (*) (A1,A2)>
{
    
//......
}
;

Heap
<char *(*) (int,int)> h7; //R是char *,A1和A2是int
//把 char *(*) (int,int) 想象成一个"指向有两个参数的非成员函数的指针"

template 
<class C,typename T>
class Heap<T C::*>
{
    
//......
}
;
Heap
<std::string Name::*> h8;//T是string,C是Name

//尽管为何需要对这些东西使用Heap只是一个猜测,先知道有这么一用法吧!
 
Qwen3.5GDN Prefill内核优化:图驱动稀疏注意力的GPU访存重构 Prefill阶段是大模型推理的关键瓶颈,本质是长上下文下KV Cache与注意力计算的访存密集型任务。其性能受限于显存带宽利用率、L2缓存命中率及SM计算单元空转,尤其在动态图调度、稀疏注意力和混合内存布局等复杂场景中更为突出。Qwen3.5GDN代表一类新型图导向架构,将传统静态Prefill拆解为图节点驱动的分段执行,使访存模式高度不规则——这使得FlashAttention、PagedAttention等通用方案失效。本文聚焦GDN特化路径,通过图感知预取、动态稀疏Tile划分与权重-KV混合布局三 阅读详情

相关推荐

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 01

算法设计

weixin_49199313的博客 1501

C++模板全特化(具体化)与偏特化(部分具体化)详解(转)

1.模板简介 模板就是实现代码重用的一种机制,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。 模板编程和函数重载可以实现C++静态多态,也叫编译时多态。 模版可以分为两类,一个是函数模版,另一个是类模版。 2.模板特化的目的 模板本来是一组通用逻辑的实现,但是可能存在特定的参数类型下,通用的逻辑实现不能满足要求,这时就需要针对这些特殊的类型,而实现一个特例模板—即模板特化。 3.重点注意 1)类模板和函数模板都可以被全特化; 2)类模板能偏特化,不能被重载;...

zhaominyong的专栏 1239

笔记汇总 | 斯坦福 CS229 机器学习

本文为斯坦福大学 2014 秋季 CS229 机器学习课程学习笔记本文主体部分转载自黄海广博士,文末已给出,大家有兴趣可以直接访问笔记首页,下载对应课程资料及作业代码。

ReturnTmp的博客 2463

模板全特化、偏特化(局部特化)

文章目录一、类模板特化1.1类模板全特化a)常规全特化b)特化成员函数而不是模板1.2类模板的偏特化(局部特化)模板参数数量偏特化模板参数范围特化函数模板特化 特化反义就是泛化,泛化:模板,可以随便指定类型 特化:对特殊的类型(类模板参数)进行特殊的对待 一、类模板特化 1.1类模板全特化 a)常规全特化 必须先有泛化版本才能存在特化版本。只要涉及特化,一定先存在泛化。 特化版本代码编译器会优先选择。 #include <iostream> #include <map> using

TT的博客 1121

利用NURBS曲线进行点云曲面拟合算法

点云拟合曲面算法是将点云数据拟合成一个二次或高次曲面模型的算法。这种算法主要用于三维模型重建、计算机视觉、机器人感知、医学图像处理等领域。最小二乘法(Least Squares Method):通过最小化点到曲面距离的平方和来拟合曲面模型。三角剖分算法(Triangulation-Based Method):将点云构建成三角网格,再拟合成曲面模型。隐式曲面算法(Implicit Surface Method):通过定义一个隐式函数来表示曲面,然后用点云数据来估计隐式函数的系数。

weixin_44770969的博客 1万+

ESP32小车DIY:从零搭建无线遥控智能车(附完整代码与避坑指南)

本文详细介绍了如何从零开始DIY一台基于ESP32的无线遥控智能小车。内容涵盖核心硬件选型、电路设计、低延迟ESP-NOW无线通信协议的配置与实战,以及双电机差速控制算法与PWM调速的实现。文章提供了完整的代码示例和关键的避坑指南,旨在帮助开发者快速构建稳定可靠的智能车平台,并为进一步的功能扩展奠定基础。

gamma的博客 469

4-6类和函数的模板全特化、偏特化(局部特化)

特化:相反的是 泛化:模板,可以随便指定类型 特化:对特殊的类型(类型模板参数)进行特殊的对待。 类模板特化 1.类模板全特化 常规全特化 必须先有泛化版本才能存在特化版本。只要设计特化,就一定存在泛化 特化版本代码编译器会优先选择 #include <iostream> #include <string> using namespace std;...

qq_41543888的博客 869

MRST开源油藏模拟:从入门到精通的全流程指南

本文全面介绍了MRST开源油藏模拟工具的使用方法,从环境搭建到核心功能实战,再到性能优化和工业级应用。MRST作为一款基于MATLAB的开源工具,为油藏工程师提供了强大的数值模拟能力,特别适合教学和科研场景。文章还分享了二次开发技巧和常见问题解决方案,帮助读者快速掌握油藏模拟技术。

beer8的博客 326

15.6 模板全特化与偏特化(局部特化)

模板全特化与偏特化(局部特化)

zzyzxb的博客 612

【SpringBoot 3.x 第43节】你还敢说 Spring 启动慢是“宿命”?Spring AOT 把启动剧本都提前写死了,你服不服?

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。

**My Coding Family** 540

MCAL中Dsadc的配置

DSADC模块作为一个专用的模块,主要应用在编码器软解码,功能强大而复杂,这里介绍了Dsadc的mcal配置和详细描述,让你全面学习和理解这个模块功能和应用。

dhyw12399999的博客 788

模板的全特化和局部特化

模板的特化是一种在编译时根据特定类型提供特定实现的技术。与模板泛化相对,其帮助我们对有一定特殊性的类型进行特殊性的处理,支持了模板泛化处理中的偏差,从而提高了代码的灵活性和可重用性。特化可以分为全特化和局部特化(也叫偏特化)。一般我们将特化版本与泛化版本的代码放在同一个.h文件中。

2301_78933228的博客 1299

Modelsim:LPDDR5仿真(含美光仿真模型官方sv&vcs代码)

虽然,三星在设计跟量产上,早于其他家存储产商,但是镁光后来居上了,是业界首家支持全速 LPDDR5 的供应商,并且开发者在做开发的时候,也是用美光颗粒比较多,所以这里就先以美光的仿真模型为主进行仿真。 本工程为美光官方工程,支持Modelsim、VCS、ncverilog三种仿真器仿真。模型破解过,为完整system-verilog代码。

千歌叹尽执夏的博客 1283

C++必知必会(5)

条款47模板局部特化 不能对函数模板进行局部特化,所能做的即使重载它们。 但可以对类模板进行局部特化。 template class Heap;      //主模板 template classHeap{…}; //局部特化 局部特化的语法类似完全特化,但是他的模板参数列表是非空的。当使用任何(未经修饰的)指针类型来实例化一个Heap时,这个局部特化版将优先于主模板而被采用。进一步而言

walkerkalr的专栏 1093

基于Vivado MIG IP核的DDR3读写实验(top_rom_ddr/ddr_top)

一、前言 关于Vivado MIG IP核详细配置可以参考我之前的文章:基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL) 关于MIG IP核的用户端的接口时序可以参考这篇文章:XILINX 的 MIG IP(非AXI4)接口时序以及控制 二、实验内容 本次实验的内容主要是通过MIG IP核向DDR3读写数据,DDR3的接口时序由ddr_top模块提供: ddr_top模块的数据来源是wr_fifo,wr_fifo的数据实际来自top_sd_photo模块(本实验仿真

耐心的小黑的博客 3027

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C++模板全特化与偏特化:编译期契约重写的工程实践

模板特化是C++泛型编程中实现编译期类型分发的核心机制,其本质并非语法糖,而是通过显式重定义模板实例的完整契约来达成零开销优化与语义重构。基于ISO C++标准的特化解析规则,全特化(template<>)彻底接管特定类型组合,适用于vector<bool>位压缩、std::hash定制等场景;偏特化(template<typename T> class X<T*>)则面向类型族提供泛化定制,广泛用于智能指针、序列化框架和类型特征(type traits)构建。二者共同支撑高性能网络库、嵌入式配置系统及跨平

weixin_34146805的博客 381

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++必知必会

条款1数据抽象 1   条款2 多态 2   条款3 设计模式 5   条款4 STL 8   条款5 引用是别名而非指针 10   条款6 数组形参 13   条款7 常量指针与指向常量的指针 16   条款8 指向指针的指针 19   条款9 新式转型操作符 21   条款10 常量成员函数的含义 25   条款11 编译器会在类中放

kobejayandy的专栏 941

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

阅读者(四):C++必知必会

【编者按】一本编程语言的好书,倘若能经受住时间的考验成为经典,那么它的作者必然是在这门语言浸淫多年达至炉火纯青地步的专家级人物。《C++必知必会》的作者Stephen C. Dewhurst是贝尔实验室最早的C++程序员之一,有着20多年的C++应用经验。他的履历与经验足以让读者心生信赖。然而,好的程序员不一定能写出好书。Stephen是C/C++ User Journal的资深编辑,并担任了C+...

cpongo5 128

【一文读懂】《Effective C++ 第三版》55 个 C++ 编程黄金法则

本文是《Effective C++》第三版(Scott Meyers 著)的导读,按原书 9 章顺序逐条梳理 55 个 C++ 编程黄金法则。全书以「C++ 是四个次语言(C、OO、Template、STL)的联邦」为认知框架,涵盖习惯 C++、资源管理、构造析构赋值、接口设计、继承多态、模板泛型编程、自定义内存管理与现代标准库。每条条款以「核心思想 + 易错代码示例 + 现代 C++ 对照」呈现,适合已掌握 C++ 基本语法想写出工业级代码的开发者。

码工许师傅 338

C++函数模板与STL底层契约深度解析

函数模板和STL是C++泛型编程的基石,其本质并非语法糖,而是编译期类型契约与运行时算法复杂度的精密协同。理解模板实例化三阶段校验(语法检查→SFINAE筛选→操作符可用性验证)和STL容器迭代器类别约束(如std::sort要求随机访问迭代器),是规避线上事故的关键。技术价值体现在内存布局控制(如SSO陷阱)、性能确定性保障(如unordered_map哈希冲突退化)及零拷贝优化能力(如string_view替代string)。典型应用场景包括嵌入式实时日志、高频交易系统、HTTP解析器与跨平台图像处理库

weixin_30460489的博客 290

【一文读懂】《Effective STL》50条有效使用STL的经验

本文按 Scott Meyers《Effective STL》(2001)原书 8 章顺序,系统梳理全部 50 条条款,覆盖容器选型、vector/string、关联容器、迭代器、算法、函数子、STL 实战与其他议题。对初学者易混淆处配代码示例,并在关键处标注 C++11/20 的现代等价写法(如 unordered_map、std::erase_if、lambda 取代 bind1st)。

码工许师傅 366

C++ 类模板的特化与局部特化

1.类模板的特化 特化模板就是通过模板实参来特化类模板,通过特化类模板,可以优化基于某种特定类型的实现。另外,如果要特化一个类模板,你还要特化该类模板的所有成员函数,如果只是特化某个成员函数,也就没有特化整个模板类。 为了特化一个类模板,你必须在起始处声明一个template&amp;amp;amp;lt;&amp;amp;amp;gt;,用来特化类模板。 template&amp;amp;amp;lt;&amp;amp;amp;gt; class Stack&

青山绿水 1459

C++模板全特化,偏特化(局部特化)

全特化,所有TU类型模板参数,都得用具体的类型代表。原来T 现在T* (从任意类型T缩小为指针类型T*)。特化:对特殊的类型,进行特殊的对待。给他开小灶,给他写适合他的专用代码,必须现有泛化版本,才能有特化版本。留一个模板类型参数,留下U,另外两个绑定到具体类型,所以只剩下U。因为我们特化了double double类型的testfunc函数 所以我们调用的时特化的testfunc函数。当T U这两个类型模板参数都为int 类型时。偏特化从两个方面说起,一个是从模板参数数量上,一个是从模板参数的范围上。

qq_42508660的博客 1098

C++基础学习-33模板全特化、偏特化(局部特化)

模板全特化、偏特化(局部特化)

weixin_43548583的博客 851
上一篇: C++-必知必会_类模板显式特化(条款46)
下一篇: PHP-常用代码片段
MasterFT
博客等级 码龄20年 48粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值