草庐IT

static_if

全部标签

c++ - std::static_pointer_cast 是否有任何额外的运行时开销?

相对于static_cast,即。所以,如果我们有这两个类型转换Base*b(newDerived());Derived*d=static_cast(b);//(1)shared_ptrb(newDerived());shared_ptrd=static_pointer_cast(b);//(2)第(2)行会比第(1)行慢吗? 最佳答案 是的,它有更多的开销,因为它必须返回一个新的shared_ptr而不是一个新的原始指针。boost实现是:templateshared_ptrstatic_pointer_cast(shared_p

c++ - 如何写多个if条件

我有两个变量A和B我想写一段代码,如果两个变量之一等于151or156or720并且另一个不等于其中一个数字,则第三个变量C=0等于1。例如1)ifA=151andB=700thenC=12)ifA=151andB=720thenC=03)ifA=140andB=700thenC=0这是代码intA=0cin>>A;intB=0cin>>B;intC=0;intDECKlist[3]={151,156,720}for(intd=0;d这样可以吗?还有其他更好的方法吗? 最佳答案 这是一个异或,异或。C++中没有逻辑异或,但您可以针对

c++ - gcc/C++ : If CPU load is low, 那么代码优化没什么用,对吗?

我的同事喜欢使用带“-g-O0”的gcc来构建生产二进制文件,因为如果发生核心转储,调试很容易。他说不需要使用编译器优化或调整代码,因为他发现生产过程中的CPU负载不高,例如30%左右。我问他原因,他告诉我:如果CPU负载不高,瓶颈一定不是我们的代码性能,应该是一些IO(磁盘/网络)。因此,使用gcc-O2无法改善延迟和吞吐量。这也表明我们在代码中没有太多需要改进的地方,因为CPU不是瓶颈。对吗? 最佳答案 关于CPU使用~优化我希望程序中的大多数优化问题都与高于平常的CPU负载相关,因为我们说次优程序做的比理论上需要的多。但这里的

C++-14 使用 enable_if_t 选择整数类型模板化类的成员函数

我正在尝试基于一个完整的类模板参数启用不同的成员函数,如下所示:#includetemplatestructFoo{template=0>intbar(inti)const{returni;}template=0>intbar(inti,intj)const{returni+j;}};intmain(intargc,constchar**argv){Fooa;a.bar(1);Foob;b.bar(1,2);return0;}在c++-14模式下使用gcc5,编译失败,出现如下错误:tools/t1.cpp:Ininstantiationof'structFoo':tools/t1.c

c++ - 带有 if 语句的 auto 函数不会返回值

我制作了一个模板和一个auto函数,用于比较2个值并返回最小值。这是我的代码:#includeusingnamespacestd;//Templatewithavaluereturningfunction:PrintSmallertemplateautoPrintSmaller(TNumOne,UNumTwo){if(NumOne>NumTwo){returnNumTwo;}else{returnNumOne;}}intmain(){intiA=345;floatfB=23.4243;cout但它无法编译,我在VS2015上遇到此错误:错误C3487“int”:所有返回表达式必须推导出

c++ - Static Cast 访问静态 const 类成员

这个问题在这里已经有了答案:Undefinedreferencetostaticconstint(9个回答)关闭5年前。所以昨天我正在寻找SO,但找不到以下问题的答案。这种情况来self正在使用的一些代码,但这里是MCVE来演示它。我在A.h中定义了一个类A,其中只有一个静态常量。我已经在标题中对其进行了初始化。#ifndefA_H_#defineA_H_classA{public:staticconstinttest=5;~A(){};};#endif/*A_H_*/然后我有一个B类需要从A类访问publicstaticconst。在这个例子中,它将把值深度复制到一个vector中。

c++ - 为什么这个涉及 std::enable_if 的模板元函数会产生不希望的结果?

我有一个类型特征templatestructis_binary_function:std::false_type{};及其专长templatestructis_binary_function&&!std::is_void_v&&!std::is_void_v&&function_t::isBinaryCallable,function_t>>:std::true_type{};我正在尝试识别具有公共(public)类型定义result_t、parameter1_t和parameter2_t以及静态常量的类isBinaryCallable值为true。然而,下面的代码没有输出我所期望的:

c++ - 无法在 C++17 之前的模式下使用 static constexpr 进行编译

为什么以下最小示例不能用c++11或c++14编译,而是用c++17编译>和c++2a?#include#include#include//works://staticconstexprintVALUE_LIMIT_A=std::numeric_limits::max();classClassy{//doesnotworkinc++11(constexprintroduced)norc++14://worksifc++17ornewer:staticconstexprintVALUE_LIMIT_A=std::numeric_limits::max();intVALUE_LIMIT_B

c++ - 这段代码是否滥用了 STL 的 find_if?

假设我有一个存储在vector中的服务器名称列表,我想一次联系一个服务器,直到有人成功响应为止。我正在考虑以下列方式使用STL的find_if算法:find_if(serverNames.begin(),serverNames.end(),ContactServer());其中ContactServer是一个谓词函数对象。一方面,存在一个问题,因为谓词不会总是为相同的服务器名称返回相同的结果(因为服务器停机、网络问题等)。但是,无论使用谓词的哪个拷贝(即谓词没有真实状态),都会返回相同的结果,因此状态保持谓词的原始问题在这种情况下不相关。你说呢? 最佳答案

c++ - 有什么理由更喜欢 static_cast 而不是一系列隐式转换?

假设我有一个实现多个接口(interface)的类classCMyClass:publicIInterface1,publicIInterface2{};并且在该类的一个成员函数中,我需要获得一个指向这些接口(interface)之一的void*指针(IUnknown::QueryInterface()中的典型情况。典型的解决方案是使用一个static_cast来实现指针调整:void*pointer=static_cast(this);如果没有从CMyClass继承的已知类,在这种情况下是安全的。但是如果这样的类存在:classCDerivedClass:publicCUnrelat