首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++;有没有办法让我的开关函数同时拒绝一个有效和无效的答案?

在C++中,可以通过异常处理机制来实现开关函数同时拒绝有效和无效答案的功能。异常处理是一种在程序执行过程中检测到异常情况时,跳转到异常处理代码的机制。

首先,你可以定义一个自定义异常类,用于表示无效答案的情况。例如:

代码语言:txt
复制
class InvalidAnswerException : public std::exception {
public:
    const char* what() const throw() {
        return "Invalid answer!";
    }
};

然后,在开关函数中,根据输入的答案进行判断,如果是无效答案,则抛出自定义异常。如果是有效答案,则执行相应的逻辑。例如:

代码语言:txt
复制
void switchFunction(int answer) {
    if (answer < 0 || answer > 1) {
        throw InvalidAnswerException();
    }

    // 执行有效答案的逻辑
    if (answer == 0) {
        // ...
    } else {
        // ...
    }
}

在调用开关函数的地方,可以使用try-catch语句来捕获异常并进行处理。例如:

代码语言:txt
复制
try {
    switchFunction(2);
} catch (const InvalidAnswerException& e) {
    std::cout << e.what() << std::endl;
}

这样,无论是有效答案还是无效答案,都可以通过异常处理机制来进行拒绝和处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

缓存穿透,缓存击穿,缓存雪崩详解及解决办法

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说缓存穿透,缓存击穿,缓存雪崩详解及解决办法[通俗易懂],希望能够帮助大家进步!!!...1.4 布隆过滤器 如果数据比较少,我们可以把数据库中的数据,全部放到内存的一个map中。 这样能够非常快速的识别,数据在缓存中是否存在。如果存在,则让其访问缓存。如果不存在,则直接拒绝该请求。...但如果数据量太多了,有数千万或者上亿的数据,全都放到内存中,很显然会占用太多的内存空间。 那么,有没有办法减少内存空间呢? 答:这就需要使用布隆过滤器了。...在访问数据库时加锁,防止多个相同productId的请求同时访问数据库。 然后,还需要一段代码,把从数据库中查询到的结果,又重新放入缓存中。办法挺多的,在这里我就不展开了。...2.4 缓存不失效 此外,对于很多热门key,其实是可以不用设置过期时间,让其永久有效的。 比如参与秒杀活动的热门商品,由于这类商品id并不多,在缓存中我们可以不设置过期时间。

11.7K64

烂大街的缓存穿透、缓存击穿和缓存雪崩,你真的懂了?

1.4 布隆过滤器 如果数据比较少,我们可以把数据库中的数据,全部放到内存的一个map中。 这样能够非常快速的识别,数据在缓存中是否存在。如果存在,则让其访问缓存。如果不存在,则直接拒绝该请求。...但如果数据量太多了,有数千万或者上亿的数据,全都放到内存中,很显然会占用太多的内存空间。 那么,有没有办法减少内存空间呢? 答:这就需要使用布隆过滤器了。...但我们都知道hash算法是会出现hash冲突的,也就是说不通的key,可能会计算出相同的位置。 上图中的下标为2的位置就出现了hash冲突,key1和key2计算出了一个相同的位置。...然后,还需要一段代码,把从数据库中查询到的结果,又重新放入缓存中。办法挺多的,在这里我就不展开了。 2.3 自动续期 出现缓存击穿问题是由于key过期了导致的。...2.4 缓存不失效 此外,对于很多热门key,其实是可以不用设置过期时间,让其永久有效的。 比如参与秒杀活动的热门商品,由于这类商品id并不多,在缓存中我们可以不设置过期时间。

20410
  • 教你如何优雅地拒绝自作多情的C++

    首先我们认为任何一个学生对象,都必须有ID和name,因此在定义学生对象的时候我们就要拒绝C++自作多情地自动生成①无参构造函数,这很简单,我们只需要定义任意版本的类构造函数,就可以优雅地拒绝。...通过自定义析构函数来优雅地拒绝C++自动生成的②空析构函数 student::~student( ) { delete [ ] data; } 再次,我们不希望使用一个学生来初始化另一个学生,...这样的话以上代码就不合法了,look: 通过private权限来优雅地拒绝C++自动生成③复制构造函数和④赋值操作符函数 class student { ... ... private:...student(const student &); student &operator=(const student &); }; 以上妙计,可不是林世霖我发明的土办法,实际上这是C++官方标准和...Boost库通用的技巧,更进一步,我们可以定义一个专门包含private拷贝构造函数和private赋值操作符函数的特定类Uncopyable,并将之成为所有需要拒绝这些默认类成员方法的类的基类。

    54130

    如何理解Rust的核心特性(所有权、借用、生命周期)

    答案是没有。我们上文提到了,所有权机制的核心就是,让一个内存块的回收和唯一一个变量绑定,这个变量出栈,那么对应的堆内存也要回收,引入借用之后,所有权没有发生转移,所以堆内存回收的时机仍然和之前一样。...上面这句话,我们做一个简单的概括,概括为——a和c是b的依赖。基于这一个概括,那么可以再得到一个结论——只有依赖有效,那么结果才能有效,任何一个依赖无效,结果就无效。那么,什么可以导致依赖无效呢?...即,结果有效时,依赖必须有效,结果无效时,依赖的有效性不做要求。而上文代码当中,c的有效期显然短于b,那自然就不合理了。这里我们看到了生命周期带来的问题,那么有办法解决或者绕过这些问题吗?...答案是,没有。生命周期是所有权机制带来的副作用,我们要做的是,保证依赖的有效性,而不是在依赖可能无效的前提下,保证结果的有效性。这两者是存在很大区别的。...那有什么解决办法呢,也很简单,我们需要手动指定结果和依赖的生命周期,来保证函数内部可以判断,同时我们再函数外部,确认函数调用时传进去的借用符合程序声明时候的生命周期。

    1K50

    jvm 内存分配性能提升之——逃逸分析与tlab

    通过这两种方式,我们了解了JVM分配内存的机制。但是这里有一个问题,我们从一开始就在讨论规整的内存与不规整的内存的内存分配方式,但是大家有没有想过堆中的内存规整不规整这个又是由什么导致的呢?...逃逸分析和栈上分配只是争对于单线程环境来说的,如果在多线程环境中,不可避免的会有多个线程同时在堆空间中分配对象的情况。 这种情况下如何处理才能提升性能呢?...垃圾回收的时候,会扫描Eden Space和一个Suvivor Space。如果在垃圾回收的时候发现Eden Space中的对象仍然有效,则会将其复制到另外一个Suvivor Space。...HeapWordSize是heap中一个字的大小,我猜它=8。别问我为什么,其实我也是猜的,有人知道答案的话可以留言告诉我。 TLAB的大小可以通过: -XX:TLABSize 来设置。...同时JVM还定义了一个开关: -XX:TLABWasteIncrement=N 为了防止过多的slow allocation,JVM定义了这个开关(默认值是4),比如说第一次slow allocation

    83311

    八个应对算法题的技巧,助你攻克面试官的难题

    作者 | 梁唐 出品 | 公众号:Coder梁(ID:Coder_LT) 大家好,我是梁唐。 之前写算法题题解的时候,都会和大家探讨一下做题的一些技巧和方法。...前前后后也写了不少,今天做一个简单的总结,整理一下所有我相对比较熟悉的技巧,尤其是在面试或者是比赛的时候应付难题的技巧。说不定就可以在关键时刻起到作用。...在面试里遇到难题和没有准备的问题也是正常现象,事先可以做一些心理准备和心理建设,这样有助于冷静下来。 大脑思考和个人的发挥都需要一个冷静的环境,这一点非常重要,几乎可以说胜过所有技巧。...我们觉得一道题目难,比想不出解法更可怕的是无从下手。无从下手时无论如何绞尽脑汁,往往都是无效思考,还是很难做出题目。所以我们要拒绝无效思考,尽量做有效思考。...总之,当我们正面强攻遇到困难时不妨思考一下反向突破,直接枚举不行,我们有没有办法构造答案?构造答案比较困难,能不能搜索?

    47120

    烂大街的缓存穿透、缓存击穿和缓存雪崩,你真的懂了?

    1.4 布隆过滤器 如果数据比较少,我们可以把数据库中的数据,全部放到内存的一个map中。 这样能够非常快速的识别,数据在缓存中是否存在。如果存在,则让其访问缓存。如果不存在,则直接拒绝该请求。...但如果数据量太多了,有数千万或者上亿的数据,全都放到内存中,很显然会占用太多的内存空间。 那么,有没有办法减少内存空间呢? 答:这就需要使用布隆过滤器了。...[aed7a9de-f98f-47ae-8d0a-cb3d56184d27.png] 上图中的下标为2的位置就出现了hash冲突,key1和key2计算出了一个相同的位置。...然后,还需要一段代码,把从数据库中查询到的结果,又重新放入缓存中。办法挺多的,在这里我就不展开了。 2.3 自动续期 出现缓存击穿问题是由于key过期了导致的。...2.4 缓存不失效 此外,对于很多热门key,其实是可以不用设置过期时间,让其永久有效的。 比如参与秒杀活动的热门商品,由于这类商品id并不多,在缓存中我们可以不设置过期时间。

    1.2K92

    C++ explicit关键字详解

    C++ explicit关键字详解 首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的,跟它相对应的另一个关键字是implicit...在C++中, 如果的构造函数只有一个参数时, 那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象....有什么办法阻止这种用法呢? 答案就是使用explicit关键字....上面也已经说过了, explicit关键字只对有一个参数的类构造函数有效, 如果类构造函数参数大于或等于两个时, 是不会产生隐式转换的,所以explicit关键字也就无效了...., 就是当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效, 此时, 当调用构造函数时只传入一个参数, 等效于只有一个参数的类构造函数, 例子如下: class CxString

    8.8K40

    如何判断一门语言的好坏

    当你用 Python 快速实现了一个算法并开始验证的时候,别人可能还在用 C++ 吭哧吭哧地写着 std::vector 的 for 循环;当你用 Swift 快速实现了一个 iOS demo 的时候,...又或者说,用 C++ 和 Java 实现同一个需求,C++ 你需要花费额外的精力关注内存管理,数组越界,类型安全等问题,这样你留给业务本身的精力就少了,开发变慢了,bug 也更容易出现了。...编写效率高意味着同样的功能我可以用更少的代码实现;同时 sdk 功能齐全,轮子多,大部分基础组件不需要重复开发。没错就像 Python 那样。...习惯会让你避开新的东西,而能让你能力,事业,资产产生“增量”的,往往就是这些新的东西。新的东西最容易产生“增量”。 我们判断一个东西好不好,有没有价值,有没有必要去投入,不要用“习惯”。...就像我这样,我说 Kotlin 好,我把好的理由讲给你听,你觉得没道理,你可以针对这些点进行反驳,或者提出新的观点,然后和我进行讨论。用“不习惯”作为理由来拒绝,只会让自己错失“增量”的机会。

    84140

    Kotlin 从拒绝到真香

    当你用 Python 快速实现了一个算法并开始验证的时候,别人可能还在用 C++ 吭哧吭哧地写着 std::vector 的 for 循环;当你用 Swift 快速实现了一个 iOS demo 的时候,...又或者说,用 C++ 和 Java 实现同一个需求,C++ 你需要花费额外的精力关注内存管理,数组越界,类型安全等问题,这样你留给业务本身的精力就少了,开发变慢了,bug 也更容易出现了。...编写效率高意味着同样的功能我可以用更少的代码实现;同时 sdk 功能齐全,轮子多,大部分基础组件不需要重复开发。没错就像 Python 那样。...习惯会让你避开新的东西,而能让你能力,事业,资产产生“增量”的,往往就是这些新的东西。新的东西最容易产生“增量”。 我们判断一个东西好不好,有没有价值,有没有必要去投入,不要用“习惯”。...就像我这样,我说 Kotlin 好,我把好的理由讲给你听,你觉得没道理,你可以针对这些点进行反驳,或者提出新的观点,然后和我进行讨论。用“不习惯”作为理由来拒绝,只会让自己错失“增量”的机会。

    1.4K20

    千万别再瞎招人了

    我用过的大家都用的方法: 在水木上发贴子(有点效果) 在蓝色理想上发贴子(无效) 在技术邮件组里发贴子(无效) 买 51job/智联 最便宜的服务(有点效果) 给所有可以想到的人打电话,请他们推荐(无效...) 给所有和你讨论过创业,喝过点小酒的人打电话(无效) 约前同事私下谈(有效) 我用过的大家可能没有用的方法: 上 twitter,看 XXX 的 follower,一个一个看,看他们的 twitter...其实解决的办法也很简单,培养的时候进行适当引导,让员工发挥自己的主动学习能力,这样不但人得到更多成长,公司也不会觉得投入太多患得患失。所谓师傅领进门修行在个人。...到底什么特征才是既通用,又能够有效地鉴别高低应聘者的特征呢?这个特征必须不像博客那样难以实现,同时又必须有足够的区分度 。 有的地方在要求填写简历的时候必须填上平时都访问哪些技术网站。...以及另一类:对设计思想和原则的理解: C++编程思想 Effective C++ 深度探索C++对象模型 C++语言的设计和演化 C专家编程 C陷阱与缺陷 C语言接口与实现 Lua程序设计 Linkers

    53330

    C++函数论

    引 关于C++的函数有很多知识,因为其函数有多种变体,可以说C++创作者为了开发方便,打开了很多个后门让编程人员随心所欲地炫技使用,但私以为这也造成了使用函数时的复杂度,如果真的在代码中使用各种变体,虽然确实可以让代码看上去简洁高级...语言下使用宏来实现: #define SQUARE (X) X*X 默认参数 和python一样,c++允许给函数的参数设置默认值,如果在调用时没有给对应参数赋值,那么函数将使用默认值,方法其实就是在声明函数原型时同时声明参数的默认值...5); // 有效 int func2 (int n, int m = 6, int j); // 无效 // 不允许这样调用: func(1, , 2);// 无效 函数重载 c++允许有多个同名函数...这还有一个名字,叫多态,有没有熟悉一点了。...显示具体化 上面的函数模板让所有的参数类型使用同一个函数代码块执行同一种操作,如果我这时候又想对某个特定类型做不同的操作怎么办?就你名堂多。 一种方法是使用函数重载。

    33110

    C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)

    C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。...封装本质上是一种管理,让用户更方便使用类。 案例: 计算机作为复杂设备,其设计体现了高度的封装性。 用户只需通过开关机键、键盘输入、显示器和USB插孔等外部接口与计算机交互,完成日常任务。...计算机内部的核心部件如CPU、显卡、内存等,则隐藏在机壳内部,用户无需关心其详细设计或工作原理。这种设计使得计算机易于使用,同时保护了内部复杂结构的安全性和稳定性。...在C++中,当你有一个类(比如Date类)并且这个类有成员函数(比如Init和Print),编译器确实为每个非静态成员函数增加了一个隐藏的指针参数this。...由于 p 是空的,this 指针也是无效的,因此程序崩溃。 this指针存在哪里? this 指针是 C++ 编译器在调用成员函数时自动添加的一个隐式参数。

    16110

    双“局部切换”与特朗普的割韭菜

    实现这个功能还是很简单的: 只要分别建立这样的标签,再将查看表和查看图的按钮上添加书签即可: ? ?...当1组图表切换时,由于要考虑到此时2组在进行切换时不能对1组的现状进行修改,因此2组的图表切换开关一定要进行切换,也就是要两个单独的开关。同理,左侧也需要2组单独的开关。也就是: ?...说白了,放到人身上就是聪明和智慧。 在绝大多数情况下,智慧,换一个说法,就是你提前知晓答案。 当你还是小孩子的时候,你知道了2+2=4,你老师问你2+2=几,别人不会,你说等于4,好,老师说你聪明。...当面对一项工作,别人无从下手之时,而你的脑海中早已有了答案; 当公司新来了个性很强能力也很强的员工,别人没办法和他相处,而你早就知道该如何用好这种人; 当遭遇了诸如新冠肺炎这种紧急事件,别人万分紧张漏洞百出...不过,这些人高兴的实在太早了,上周五,OPEC+的正式新闻传了过来,由于墨西哥拒绝减产份额,这份令市场众望所归的协议,还是没有谈成。 ? 墨西哥为什么会拒绝?嘿嘿,这事得问特朗普了。

    51031

    java分布式系统开关功能设计(服务升降级)

    可以是一个数据库访问系统,我们暂且称之为MetaServer,开关的属性防止在DB中,然后MetaServer提供页面来修改数据,同时提供接口读取开关的数据,在应用启动的时候,通过MetaServer来读取数据...这个时候就需要通过一些办法(办法很多,可以是消息系统,可以是zookeeper,可以是页面触发)来清理一下开关属性的缓存,让缓存重新加载一下,从而实现最新的状态获取。...这个是不是有点复杂,有没有更加简单的办法?...但是我同时又A、B、C三个开关,在不同的业务场景下,可能需要关闭A和B开关,在另外一个场景下,可能需要关闭A和C开关,这时候认为操作有可能会有遗漏或者疏忽,怎么搞呢?...,同时设置阀值(例如RT超过5秒就降级,1秒就升级)以及阀值触发改动的开关; 第三部:异步启动一个线程,扫描队列,达到我们的条件,就触发做变更(有个问题,

    1.8K30

    6000多字 | 秒杀系统设计注意点

    很多媒体类的网站,某一篇文章的内容不管是你访问还是我访问,它都是一样的。所以它就是一个典型的静态数据,但是它是个动态页面。...由于热点操作是用户的行为,我们不好改变,但能做一些限制和保护,所以本文我主要针对热点数据来介绍如何进行优化。...发现热点数据 发现静态热点数据 发现动态热点数据 处理热点数据 优化 优化热点数据最有效的办法就是缓存热点数据,如果热点数据做了动静分离,那么可以长期缓存静态数据。...它是一个有目的、有计划的执行过程,所以对降级我们一般需要有一套预案来配合执行。如果我们把它系统化,就可以通过预案系统和开关系统来实现降级。...当系统负载达到一定阈值时,例如 CPU 使用率达到 90% 或者系统 load 值达到 2*CPU 核数时,系统直接拒绝所有请求,这种方式是最暴力但也最有效的系统保护方式。

    42310

    6000多字 | 秒杀系统设计注意点【理论】

    很多媒体类的网站,某一篇文章的内容不管是你访问还是我访问,它都是一样的。所以它就是一个典型的静态数据,但是它是个动态页面。...由于热点操作是用户的行为,我们不好改变,但能做一些限制和保护,所以本文我主要针对热点数据来介绍如何进行优化。...发现热点数据 发现静态热点数据 发现动态热点数据 处理热点数据 优化 优化热点数据最有效的办法就是缓存热点数据,如果热点数据做了动静分离,那么可以长期缓存静态数据。...它是一个有目的、有计划的执行过程,所以对降级我们一般需要有一套预案来配合执行。如果我们把它系统化,就可以通过预案系统和开关系统来实现降级。 ?...当系统负载达到一定阈值时,例如 CPU 使用率达到 90% 或者系统 load 值达到 2*CPU 核数时,系统直接拒绝所有请求,这种方式是最暴力但也最有效的系统保护方式。

    41021

    经历过“必要时,码不亮”后,聊聊运维必须了解的高并发知识

    很多媒体类的网站,某一篇文章的内容不管是你访问还是我访问,它都是一样的。所以它就是一个典型的静态数据,但是它是个动态页面。...由于热点操作是用户的行为,我们不好改变,但能做一些限制和保护,所以本文我主要针对热点数据来介绍如何进行优化。...发现热点数据 发现静态热点数据 发现动态热点数据 处理热点数据 优化 优化热点数据最有效的办法就是缓存热点数据,如果热点数据做了动静分离,那么可以长期缓存静态数据。...它是一个有目的、有计划的执行过程,所以对降级我们一般需要有一套预案来配合执行。如果我们把它系统化,就可以通过预案系统和开关系统来实现降级。...当系统负载达到一定阈值时,例如 CPU 使用率达到 90% 或者系统 load 值达到 2*CPU 核数时,系统直接拒绝所有请求,这种方式是最暴力但也最有效的系统保护方式。

    40320

    C++初阶——类和对象

    呀哈喽,我是结衣 C++入门之后,我们就进入了C++的初阶的学习了,在了解类和对象之前,我们还是先了解,面向过程和面向对象的初步认识。...有没有画面感,以前洗衣服就是这个样子的吧。 今天我们用的C++是面向对象的,就相当与洗衣机我们只要放入衣服和洗衣粉启动洗衣机就可以了,洗衣机会帮我们把其他的步骤给做了。...讲我第一个问题我们来讲第二个问题,这个问题也叫做类的访问限定符 4.类的访问限定符及封装 访问限定符 C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用...封装本质上是一种管理,让用户更方便使用类。比如:对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。...C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问

    8410
    领券