我知道dynamic_cast有运行时检查,因此考虑更安全(可以在失败时返回空指针)但比static_cast慢。但是两者之间的开销有多糟糕?我真的应该考虑在循环中使用static_cast来解决常规大型项目中的性能问题吗?或者差异很小,只与特殊的实时程序有关。 最佳答案 你分析过它吗?规则是:当您知道目标类型有效时使用static_cast。当您不确定时使用dynamic_cast,并且您需要程序为您查找对象的运行时类型。就这么简单。所有其他考虑因素都是次要的。 关于c++-C++中的
假设我有#include#includeusingnamespacestd;structStudent{conststringname;intgrade;Student(conststring&name):name(name){}};那么,我该如何保持学生的vector?intmain(){vectorv;//errorC2582:'operator='functionisunavailablein'Student'v.push_back(Student("john"));}有没有办法做到这一点,还是我必须在堆上分配所有学生,然后存储一个指向每个学生的指针?
followingexample不会使用g++4.8.2编译:#include#includeusingnamespacestd;intmain(){vectorv{1,2,3};v.erase(v.cbegin());//Compilercomplainsreturn0;}编译器说了以下内容。(它不是很可读,但它提示vector::const_iterator和vector::iterator之间没有已知的转换。)prog.cpp:Infunction‘intmain()’:prog.cpp:8:20:error:nomatchingfunctionforcallto‘std::ve
下面的代码可以编译吗?#includevoidfoo(){conststd::pairx={1,2};auto[a,b]=x;static_assert(std::is_const_v);static_assert(std::is_const_v);}MSVC说“是的!”。GCC说“哦,不,伙计!”。Clang说“不行!”。那么,这是MSVC错误吗?这里的标准并不简单(我快速浏览了一下),但考虑到auto的规则,我想,a和b应该被复制并丢弃cv-qualifier。 最佳答案 Isthefollowingcodesupposedto
我想遍历目录中的所有文件并打印它们的内容。Boost很好地处理了迭代部分,但我不知道如何将其转换为constchar*。boost::filesystem::directory_iteratorpath_it(path);boost::filesystem::directory_iteratorend_it;while(path_it!=end_it){std::cout我试图阅读这个documentation但找不到类似string或c_str()的内容。我是C++和boost的新手,希望能找到一些类似javadoc的文档,基本上可以告诉我成员是什么,是什么函数可用而不是转储源代码。
这个问题在这里已经有了答案:Whatdoesthesingleampersandaftertheparameterlistofamemberfunctiondeclarationmean?(3个答案)关闭7年前。我在那里的一个答案中看到:Isreturningbyrvaluereferencemoreefficient?成员函数定义:Beta_abconst&getAB()const&{returnab;}我熟悉成员函数上的cv-qualifier(const),但不熟悉const&。最后的const&是什么意思?
我在初始化一个大小定义为externconst的数组时遇到问题。我一直遵循这样的规则,即全局变量应该在头文件中声明为extern,并且它们的相应定义应该在一个实现文件中,以避免变量重新声明错误。这种方法工作得很好,直到我不得不初始化一个大小被定义为外部常量的数组。我收到一个错误,指出需要一个常量表达式。但是,如果我尝试为const变量赋值,编译器会正确地提示无法将值赋给常量变量。这实际上证明编译器确实将变量视为常量。那为什么声明一个同样大小的数组会报错呢?不使用#define有什么方法可以避免这种情况吗?我也想知道这个错误的原因。包.h:#ifndefPACKAGE_H#defineP
考虑这样一个类:classMyReferenceClass{public:MyReferenceClass();constdoubleImportantConstant1;constdoubleImportantConstant2;constdoubleImportantConstant3;private:voidComputeImportantConstants(double*out_const1,double*out_const2,double*out_const3);}有一个例程(ComputeImportantConstants)在运行时计算三个常量。假设计算相当复杂,并且固有
用例:classA{staticints_common;public:staticintgetCommon()const{s_common;};};通常这会导致错误:error:staticmemberfunction‘staticintA::getCommon()’cannothavecv-qualifier这是因为constness仅适用于this指向的对象,它不存在于static成员函数中。但是,如果允许的话,static成员函数的“常量”可能很容易与static数据成员相关。为什么这个特性在C++中不存在;背后有什么合乎逻辑的原因吗? 最佳答案
为什么我不能对这样的转换使用reinterpret_cast运算符?enumFoo{bar,baz};voidfoo(Foo){}intmain(){//foo(0);//error:invalidconversionfrom'int'to'Foo'//foo(reinterpret_cast(0));//error:invalidcastfromtype'int'totype'Foo'foo(static_cast(0));foo((Foo)0);} 最佳答案 Ithinkthatreinterpret_castcanbeusef