首页 > 编程语言 >C++模板函数实现类型推导

C++模板函数实现类型推导

时间:2024-09-17 17:46:11浏览次数:10  
标签:ch 函数 推导 C++ while 模板 getchar

C++模板函数实现类型推导

以快读函数举例说明

无法类型推导的情况

template <typename T>
inline T read()
{
    T x = 0;
    int f = 1; char ch = getchar();
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
       x = x * 10 + ch - '0';
       ch = getchar();
    }
    return x * f;
}

模板参数没有实际传入到函数当中,没有参与实际的操作,函数无法读取信息,不能实现类型推导

能够类型推导的情况

template<typename T>
bool read(T& x) {
    x = 0; // 初始化
    T sign = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') { // 跳过非数字字符
        if (ch == '-') sign = -1; // 处理负号
        ch = getchar();
    }
    if (ch < '0' || ch > '9') return false; // 如果没有读到数字,则返回false
    while (ch >= '0' && ch <= '9') {
        x = x * 10 + (ch - '0'); // 计算数字
        ch = getchar();
    }
    x *= sign; // 应用符号
    return true; // 读取成功
}

模板参数参与了函数运算,能够被推导出类型

标签:ch,函数,推导,C++,while,模板,getchar
From: https://www.cnblogs.com/smartljy/p/18417340

相关文章

  • VScode快速配置c++(菜鸟版)
    1.vscode是什么VisualStdioCode简称VSCode,是一款跨平台的、免费且开源的现代轻量级代码编辑器,支持几乎主流开发语言的语法高亮、智能代码补全、自定义快捷键、括号匹配和颜色区分、代码片段提示、代码对比等特性,也拥有对git的开箱即用的支持。同时,它还支持插件扩展,通过丰......
  • C++内存管理详解:各类变量的存储区域
      在C++中,变量的存储位置取决于它们的类型和生命周期。那么不同的各个变量究竟存储在哪个区域呢?1.不同类型的变量我们首先从变量类型的不同来说明:1.全局变量和静态变量 -存储区:全局/静态区(静态区)-说明:全局变量(包括文件级和函数级的)和使用`static`关键字声明的变......
  • C++的类与对象下
    目录1.初始化列表2.隐式类型转换1.单参数2.多参数(C++11提供的新功能)3.static成员4.友元5.内部类6.匿名对象1.初始化列表C++祖师爷规定初始化列表是成员变量定义与初始化的地方。classTime{public: Time(inthour) :_hour(hour) { cout<<"Time()"<<......
  • 模板方法模式
    模板方法模式模板方法模式(TemplateMethodPattern)是一种行为设计模式,它定义了一个算法的骨架,并允许子类在不改变算法结构的情况下重写算法的某些步骤。通过这种模式,能够复用算法的整体流程,同时又能够灵活调整某些具体步骤的实现。模板方法模式的关键要素抽象类(AbstractClass......
  • 4.C++中程序中的命名空间
    咱们在前面的程序中,提到过使用usingnamespacestd;引入这个命名空间,那么std就是由编程系统提供的标准命名空间,那什么是命名空间呢?想像一下,比如一个年级的学生,在记录的时候出现了重名的情况,那么这个时候应该怎么记录呢,是不是需要加一些其它的名称,比如,一三班小李同学,一一班小李......
  • C++信奥老师解一本通题 1370:最小函数值(minval)
    ​【题目描述】有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Ai*x*x+Bi*x+Ci(x∈N∗)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的mm个(如有重复的要输出多个)。【输入】第一行输入两个正整数n和m。以下nn行每行三个正整数,其中第ii行的三个数分别位Ai、Bi和Ci输入数......
  • C++:多态
    目录一.多态的概念二.多态的定义及其实现1.虚函数2.虚函数的重写/覆盖3.实现多态的条件 4.虚函数重写的例外5.析构函数的重写6.经典例题7.C++11override和final关键字8.重载、重写/覆盖、隐藏的区别三.抽象类四.多态的原理1.虚函数表指针2.多态如何实现3.动态......
  • C++面试考点:拷贝赋值运算符和拷贝构造函数有什么区别?
    定义和功能拷贝构造函数拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,该新对象是作为另一个同类型对象的副本而创建的。其函数原型通常为类名(const类名&other)(在C++11之前,const也可省略)。例如:classMyClass{public:MyClass(constMyClass&ot......
  • C++11 线程同步接口std::condition_variable和std::future的简单使用sk
    合集-C++(1)1.C++11线程同步接口std::condition_variable和std::future的简单使用09-17收起std::condition_variable条件变量std::condition_variable有wait和notify接口用于线程间的同步。如下图所示,Thread2阻塞在wait接口,Thread1通过notify接口通知Thread2继续执行。......
  • 信息学奥赛c++语言:求整数的和与均值
    题目描述读入n(1≤n≤10000)个整数,求它们的和与均值。输入输入第一行是一个整数n,表示有n个整数。第2~n+1行每行包含1个整数。每个整数的绝对值均不超过10000。输出输出一行,先输出和,再输出平均值(保留到小数点后5位),两个数间用单个空格分隔。样例输入 4344222343222......