草庐IT

const_cast

全部标签

c++ - 如何将 "point of declaration"解释为 "const int i=2; { int i[i]; }"- C++ 标准中的示例?

我正在研究C++标准以了解操作顺序、表达式、语句和副作用。一个相关的问题是名称的“声明点”。在C++11标准的§3.3.2.1节中,该标准规定:Thepointofdeclarationforanameisimmediatelyafteritscompletedeclarator(Clause8)andbeforeitsinitializer(ifany)...以下段落添加了带有示例的注释:Note:anamefromanouterscoperemainsvisibleuptothepointofdeclarationofthenamethathidesit.……举个例子constin

c++ - 是否可以使用 dynamic_cast 进行模板类型检查?

templatevoidcheckObject(TgenericObject){MyClassA*a=dynamic_cast(genericObject);if(a!=NULL){//weknowitisoftypeMyClassA}MyClassB*b=dynamic_cast(genericObject);if(b!=NULL){//weknowitisoftypeMyClassB}}这样的事情可能吗?我们有一个模板类型,但我们想知道它是实际类型吗? 最佳答案 在模板世界中,您可能只想为每种类型专门化模板,而不是进行运行时检查

c++ - Operator = 在 C++ 中使用 Const 变量重载

我想知道你们是否可以帮助我。这是我的.h:ClassDoctor{conststringname;public:Doctor();Doctor(stringname);Doctor&Doctor::operator=(constDoctor&doc);}和我的主要:intmain(){Doctord1=Doctor("peter");Doctord2=Doctor();d2=d1;}我想执行operator=函数。谁能帮我?注意Doctor上的const成员。************编辑:*********我的主要问题是我希望另一个类具有一个Doctor属性,就像Pacient有一个D

c++ - 使用 const char[] 或 const std::string 哪一个?

哪个对字符串文字更好,标准字符串还是字符数组?我的意思是说常量字符串,比如说constcharname[]="so";//ortouseconststringname="so"; 最佳答案 对于字符串文字,并且仅对于来自文字的字符串常量,我会使用constchar[]。std::string的主要优点是它有免费的内存管理,但这不是字符串文字的问题。它是文字的实际类型,它可以直接用于任何需要旧C样式空终止字符串或C++字符串(隐式转换开始)的API。您还可以通过使用数组而不是指针来获得编译时大小的实现。现在,在定义函数接口(inter

C++ 标准 : default "const T& value" in vector constructor for type 'int'

explicitvector(size_typen,constT&value=T(),constAllocator&=Allocator());vectorvec(10);cout::const_iteratoriter=vec.begin();iter!=vec.end();++iter){coutVS2010的输出:vec.size:100000000000问题>:根据最新的C++标准,当我们使用vectorObject(size_type)定义一个vector对象时,默认的int值是多少?在这里你可以看到,VS2010输出0作为默认的int值。但我不知道这是否是C++标准所要求的

c++ - 在 C++ 中适当使用全局 const 变量?

我正在为我的CS类(class)编写程序。它模拟了一家express公司在机场的事件。这是一个非常简单的小程序,由一些头文件和源文件以及一个编排模拟的main.cpp源文件组成。有一些给定的常数值,比如cargo到达的频率、飞机的载重量、worker处理某些元素所花费的时间等(都是整数值)。我有必要在main.cpp中的几个函数中访问这些变量将main()函数上方的这些声明为constint似乎是合理的,有效地使它们成为全局的,例如constintkTotalTime=2000;constintkPlaneCapacity=25;intmain(){//...程序代码我知道在大多数情况

c++ - 是否可以通过 const 引用获取参数,同时禁止转换以便不传递临时变量?

有时我们喜欢通过引用获取一个大参数,并且如果可能的话还使引用成为const以表明它是一个输入参数。但是通过将引用设置为const,编译器允许自己转换类型错误的数据。这意味着它效率不高,但更令人担忧的是我认为我指的是原始数据;也许我会使用它的地址,但没有意识到我实际上使用的是临时地址。此代码中对bar的调用失败。这是可取的,因为引用的类型不正确。对bar_const的调用也是错误的类型,但它会自动编译。这对我来说是不可取的。#includeusingnamespacestd;intvi;voidfoo(int&){}voidbar(long&){}voidbar_const(constl

c++ - 为什么我在使用 dynamic_cast 和模板时收到错误 "A is an inaccessible base of B"?

为什么对f的调用没有解析为第一个函数重载?我收到错误:source.cpp:Infunction'intmain()':source.cpp:12:31:error:'A'isaninaccessiblebaseof'B'classA{};classB:A{};voidf(constA&){std::coutvoidf(T){std::cout(b));}请注意,如果我取出dynamic_cast,代码将起作用,但secondf被调用(它打印“Generic”)。但我想做的是接到第一个电话。我认为dynamic_cast会起作用,但由于某种原因它会导致问题。我在这里做错了什么?

c++ - 使用 dynamic_pointer_cast 时无法动态转换

为什么这段代码不起作用?std::shared_ptre=ep->pop();std::shared_ptrt;t=std::dynamic_pointer_cast(e);我收到以下错误:/usr/include/c++/4.6/bits/shared_ptr.h:386:error:cannotdynamic_cast'(&__r)->std::shared_ptr::.std::__shared_ptr::get[with_Tp=Event,__gnu_cxx::_Lock_policy_Lp=(__gnu_cxx::_Lock_policy)2u]()'(oftype'clas

c++ - 将右值引用传递给 const 左值引用参数

我正在尝试理解C++11右值引用以及如何在我的代码中使用它们来实现最佳性能。假设我们有一个类A,它有一个指向大量动态分配数据的成员指针。此外,一个方法foo(constA&a)对类A的对象执行某些操作。当A的对象被传递给函数foo时,我想阻止A的复制构造函数被调用,因为在这种情况下,它将执行底层堆数据的深层复制。我测试了传递一个左值引用:Aa;foo(a);并传递一个右值引用:foo(A());在这两种情况下,复制构造函数都没有被调用。这是预期的还是由于我的编译器(AppleLLVM5.1)的一些优化?有没有这方面的规范? 最佳答案