草庐IT

多条件

全部标签

c++ - 条件运算符问题

我在使用条件运算符获取对对象的引用时遇到了一些问题。我有一个类似于这样的设置:classD{virtualvoidbla()=0;};classD1:publicD{voidbla(){};};classD2:publicD{voidbla(){};};classC{public:C(){this->d1=newD1();this->d2=newD2();}D1&getD1(){return*d1;};D2&getD2(){return*d2;}private:D1*d1;D2*d2;};intmain(){Cc;D&d=(rand()%2==0?c.getD1():c.getD2()

c++ - 创建一个新文件避免竞争条件

我需要开发一个C++例程来执行这个看似微不足道的任务:仅当文件不存在时才创建文件,否则什么都不做/引发错误。因为我需要避免竞争条件,我想使用“请求原谅而不是许可”原则(即尝试预期的操作并检查它是否成功,而不是提前检查先决条件),据我所知,是用于此目的的唯一可靠且可移植的方法[Wikipediaarticle][anexamplewithgetline].仍然,我找不到在我的案例中实现它的方法。我能想到的最好办法是打开一个fstream在app模式(或fopeningwith"a"),用tellp检查输出位置(C++)或ftell(C)如果该位置不为零则中止。然而,这有两个缺点,即如果文

c++ - 在基于文本的冒险游戏中,如何防止长而困惑的条件代码?

我正在创建一个基于文本的C++冒险游戏。在这个游戏中,你选择去哪里,你选择做什么等等,都会有很多的可能性。我的问题是,如何防止这变得极其困惑。示例:假设在游戏的某一时刻,系统会询问您是去森林还是去沙漠。如果您选择沙漠,那将是与森林完全不同的故事情节。那么我该如何防止我的代码看起来像这样。if(playergoestothedesert)advice?{/*Wholestorylineofthedesert*/elseif(playergoestotheforest){/*Wholestorylineoftheforest*/在这些故事情节中,会有更多类似的条件,以及更详尽的故事情节,所

c++ - 派生类模板中的条件覆盖

我有一个Container类,它包含一些对象,这些对象的类型可以派生自某些基类(TypeA、TypeB等)的任意组合.).Container的基类具有返回指向所包含对象的指针的虚方法;如果包含的对象不是从预期的类派生的,这些应该返回nullptr。我想根据Container的模板参数有选择地覆盖基础方法。我尝试如下使用SFINAE,但它无法编译。我想避免为每种可能的组合专门化Container,因为可能有很多组合。#include#includeusingnamespacestd;classTypeA{};classTypeB{};classTypeAB:publicTypeA,pub

c++ - 如何有条件地为模板头设置编译器优化

我找到了aquestionsomewhatinteresting,并继续尝试回答它。作者想要编译带有AVX优化的-一个源文件(它依赖于模板库),而项目的其余部分没有这些。所以,为了看看会发生什么,我创建了一个这样的测试项目:main.cpp#include#include#include"fn_normal.h"#include"fn_avx.h"intmain(intargc,char*argv[]){intnumber=10;//thiswillcomefrominput,butlet'skeepitsimplefornowintresult;if(std::string(argv

c++ - 条件中声明的变量范围

一些重构导致了一段代码,使我得到了这个最小的测试用例:intmain(){if(inti=1){/*IF-BLOCK*/}else{throwi;}}这编译得很好。但是,我一直认为i只对IF-BLOCK可见,但似乎不是。这是编译器错误吗?另外,为什么下面的方法有效?intmain(){if(inti=1){}elseif(inti=2){}else{throwi;}}注意第二个if“重新声明”i。另一个编译器错误? 最佳答案 不,这实际上是正确的行为。6.4Selectionstatements[stmt.select]Anamei

c++ - 如何以标准方式组合 type_traits 中的条件

例如,我想使用类型T仅当std::is_pointer和std::is_const评估为true_type.当然还有一个简单的方法是这样的:templatevoidf(Tt,std::true_type,std::true_type){}templatevoidf(Tt){f(t,std::is_pointer{},std::is_const{});}但是我想要这样的东西:templatevoidf(Tt,std::true_type){}templatevoidf(Tt){f(t,std::and,std::is_const>{});}标准库是否包含类似std::and的内容??如果

c++ - 比较和交换原子操作与加载链接/存储条件操作

在x86处理器下,我不确定比较和交换原子操作与加载链接/存储条件操作之间的区别。后者比前者更安全吗?是第一个比第二个好吗? 最佳答案 共有三种常见的原子原语样式:Compare-Exchange、Load-Linked/Store-Conditional和Compare-And-Swap。CompareExchange操作将自动读取内存位置,如果它与比较值匹配,则存储指定的新值。如果读取的值与比较值不匹配,则不会进行存储。在任何情况下,该操作都会报告读取的原始值。Compare-And-Swap操作类似于CompareExchang

c++ - 条件断点 : This expression has side effects and will not be evaluated

我有一个名为size_tA::m()const的非静态常量方法,如果它返回的值大于1,我想用它来触发断点。这是A类和实例a:classA{public:std::vectormyvec;size_tm()const{returnmyvec.size();}}a;所以我在VisualStudio2013中添加了一个断点,这个条件a.m()>1//aisaninstanceofclassA但是,当我尝试编译它时,我从IDE收到以下消息:Thefollowingbreakpointcannotbeset:AtmyFile.cpp,linexxx,when'a.m()>1'istrueThis

c++ - 编译时间递归和条件

我正在阅读对"Printing1to1000withoutlooporconditionals"的回复,我想知道为什么有必要在顶部答案中包含NumberGeneration的特殊情况。如果我删除它并在模板中添加对N==1的检查(下面的代码),代码会因“模板实例化深度超过最大值”而无法编译,但我不确定为什么。条件语句在编译时的处理方式是否不同?#includetemplatestructNumberGeneration{staticvoidout(std::ostream&os){if(N==1){os::out(os);os::out(std::cout);}