草庐IT

c++ - 在 'if' 条件中定义 fstream

在answer中有以下代码:if(std::ifstreaminput("input_file.txt"));这似乎很方便,将“输入”变量的范围限制在确认有效的地方,但是VS2015和g++似乎都无法编译它。它是某些特定于编译器的东西还是需要一些额外的标志?在VS2015中,IDE突出显示“std::ifstream”和“input_file.txt”以及最后一个括号。“std::ifstream”被标记为“错误:此处不允许使用函数类型”。VS2015C++编译器给出以下错误:C4430缺少类型说明符-假定为int。注意:C++不支持default-intC2059语法错误:'('

c++ - 检查指针是否为空然后在同一个 if 语句中取消引用它是否安全?

如果传入空指针,下面的代码是否安全?if(ptr&&*ptr==value){//dosomething}检查的顺序重要吗?改成这样行不行?if(*ptr==value&&ptr){//dosomething} 最佳答案 前者是正确和安全的,后者不是。内置的&&运算符具有短路语义,这意味着当且仅当第一个参数为真时,第二个参数才会被计算。(重载运算符不是这种情况。) 关于c++-检查指针是否为空然后在同一个if语句中取消引用它是否安全?,我们在StackOverflow上找到一个类似的问题

c++ - C中If-Else和三元运算符之间的速度差异...?

所以在一位同事的建议下,我刚刚测试了三元运算符和等效的If-Elseblock之间的速度差异......似乎三元运算符产生的代码比If-快1到2倍别的。我的代码是:gettimeofday(&tv3,0);for(i=0;i(抱歉使用了gettimeofday而不是clock_gettime...我会努力提高自己。)我尝试更改block的计时顺序,但结果似乎仍然存在。是什么赋予了?此外,If-Else在执行速度方面表现出更多的可变性。我应该检查gcc生成的程序集吗?顺便说一句,这都是在优化级别零(-O0)下进行的。这是我的想象,还是有什么我没有考虑到的东西,或者这是一个依赖于机器的东西

c++ - 为什么使用预处理器 #if 语句而不是 if() else?

我看到这一直在做,例如在Linux内核中。使用预处理器命令与仅使用普通C++ifelseblock的目的是什么?有没有速度优势之类的? 最佳答案 预处理器在C/C++代码编译之前更改它(因此是预处理器)。预处理器ifs在编译时求值。C/C++ifs在运行时求值。您可以完成在运行时无法完成的事情。针对不同平台或不同编译器调整代码:#ifdef__unix__/*__unix__isusuallydefinedbycompilerstargetingUnixsystems*/#include#elifdefined_WIN32/*_Wi

c++ - remove_if 的惯用 C++

我有这门课classPoint2D{public:boolisValid();//...private:doublex_,y_;};我有一个std::vector我想删除无效点,现在我这样做:boolinvalid(constPoint2D&p){return!p.isValid();}voidf(){std::vectorpoints;//fillpointspoints.erase(std::remove_if(points.begin(),points.end(),invalid),points.end());//usevalidpoints}是否有一种标准的方法(漂亮地)做到这

c++ - 有if-else,有没有Neither Nor语句?

有没有neitherAnorB语法? 最佳答案 哦......你想要“不是”关键字?VBaddsAin'tKeyword(Newswire8-19-2004)MicrosofthasannouncedthatVisualBasicwilladdthe"Ain't"keywordtothelanguage.AccordingtoasourceontheVB.NETteam"WithVB,wewantthelanguagetoworkthewayyouthink.Extensiveusabilitystudieshavedemonstr

c++ - ZeroMQ的REQ-REP模式如何获取请求者的公网IP?

听起来在ZeroMQ中使用传统UNIX套接字方面的套接字毫无意义。基于对ZeroMQ的错误认识,我设计了一个分布式搜索算法的架构。在我的程序中,有一个代理负责监视其他代理并收集他们的数据。真实数据将按照PULL-PUSH或PUB-SUB模式在代理之间传输。每个代理都有一个PULL套接字监听传入消息。每条消息都包含一个ID号,用于指定发件人身份。在初始化阶段,监视器应该监听它的REP套接字。每个代理将连接到监控器众所周知的REP套接字并self介绍(发送他的ID号和代理正在监听的端口号)。监视器将有关代理的所有数据存储在三个字段的记录中:.(这是我在使用ZMQ时遇到问题的地方。)当一定数

c++ - 如何在 C++ 编译时应用 if

我正在尝试编写一个通用的static_for实现,它可以接受边界、增量函数和比较函数来运行循环。我一直在使用这个结构和递增1的简单循环。在这种情况下,很容易通过简单地专注于IDX&END相等来停止循环展开。然而,当增量可以是任意整数时,不能保证IDX&END总是相等的。if条件仅在运行时评估。在下面的代码片段中,我试图专注于停止递归的std::false_type。integral_constant是通过评估std::less函数(可以由用户替换为任何其他评估)构造的。不幸的是,此比较器函数也仅在运行时求值,因此编译器失败。有人可以建议如何让它发挥作用吗?注意:使用C++11。temp

c++ - `std::enable_if` 是函数指针——怎么样?

如果用户将函数指针作为参数传递,我想使用SFINAE启用特定模板。我用谷歌搜索但一无所获-我也尝试查看文档,但找不到任何类似于is_function_ptr的内容.函数指针,我指的是全局函数指针,比如TReturn(*)(TArgs...). 最佳答案 下面是确定某物是否为函数指针的类型特征和几个测试用例。请注意,要测试某物是否是函数指针,您需要测试是否std::is_pointer::value是true如果std::is_function::value是true其中T是P删除指针。下面的代码就是这样做的:#include#inc

c++ - 丢弃分支中的嵌套 constexpr-if 语句是否仍被评估?

在我看来,另一个constexpr-if语句的丢弃分支内的constexpr-if语句在MSVC(版本15.7.3)中被评估。考虑以下代码:#include#includetemplateinttest(){ifconstexpr(I!=0){return0;}else{//Thisbranchisdiscarded,butitseemsthattheconstexpr-ifbelowisstillevaulated?ifconstexpr(std::is_same_v>>){//someconstexprcheckthatisvalidonlywhenI==0return1;}els