草庐IT

c++ - 当 "virtual"位于 "class Foo : public virtual Bar"而不是 "virtual void frob()"时,这意味着什么?

我在成员函数的上下文中理解virtual,例如virtualvoidfrob()。但它在类声明的上下文中意味着什么,例如classFoo:publicvirtualBar?对于给定的方法,有8种情况源于以下三个位置是否存在virtual:1)父类(superclass)的函数;2)这个类的继承链;3)该类的功能。我想我理解1)和3)是如何相互作用的,但是2)似乎是多余的。是吗?我有什么不明白的? 最佳答案 那是virtualinheritance,当你知道你将进行多重继承时,你就会这样做。该页面有更多详细信息。

c++ - 如何在 C++ 中将 Foo** 指针转换为 const Foo**

我有classFred{public:voidinspect()const{};voidmodify(){};};intmain(){constFredx=Fred();Fred*p1;constFred**q1=reinterpret_cast(&p1);*q1=&x;p1->inspect();p1->modify();}怎样才能做到constFred**q1=&p1通过指针转换?(我刚刚读到这可能是可能的)感谢您的回答。const_cast确实适用于对象#include#includeusingnamespacestd;classFred{inta;public:Fred(){}

c++ - 如何将字符串 vector 传递给 foo(char const *const *const)?

编辑:在实现JamesHopkin的建议后,我仍然收到“无效名称‘null’”的警告,这比那些奇怪的字符要好得多。然后,我回去再次阅读库文档,结果发现对于那个特定的函数,它的参数应该比aNames的大小多一个非NULL字符串元素。该附加字符串还有其他用途。再添加一个字符串后,代码运行正常。都是我的错,我很抱歉。原帖:你好,这是我的第一篇文章,所以请多多关照。我在这个论坛上搜索并用谷歌搜索,但我仍然找不到答案。这个问题困扰了我一天多了,请大家帮帮忙。谢谢。我需要将字符串vector传递给库函数foo(charconst*const*const)。我不能传递&Vec[0]因为它是一个指向字

c++ - 为什么 gcc 提示 "declaration of ' foo' 隐藏了之前的调用 [-Werror=shadow]”

我有这个MCVE:autobar()->double{return8.0;}intmain(){if(autofoo=bar()){returnfoo;}elseif(autofoo=bar()){returnfoo;}}使用gcc7.3和这些选项-c-Werror-Wextra-Wall-Wshadow编译它会生成以下错误消息:test-shadow.cpp:Infunction‘intmain()’:test-shadow.cpp:9:17:error:declarationof‘foo’shadowsapreviouslocal[-Werror=shadow]elseif(aut

c++ - "x = new(Foo)"与任意 Foo 的 "x = new Foo"相同吗?

我正在查看一些遗留代码并遇到了x=new(Foo);(请注意提供的类型周围的括号)。我测试了变体,它似乎与x=newFoo;相同Foo是一个非POD数据结构。某些外部内存泄漏程序正在标记该行-它正在为CORBA输出参数分配内存,因此调用者应该负责删除,但这是一个包含许多间接层的单独问题。我的分析是否正确,是可以接受的风格吗? 最佳答案 这是正确的,但至少风格不寻常。有时允许在完整的类型名称周围使用括号,但在这种情况下是无关紧要的。这就像在不需要的表达式周围加上括号。也许最接近的类比是return(0);/*lookslikeafun

c++ - 不理解 C++ 类型不匹配 : const Foo* to Foo* const&

拥有这组对象和语句:QSetset;iteratorQSet::insert(constT&value)//typeofthefunctionIwanttocallconstFoo*get()const//typeofthefunctionIusetogettheargumentset.insert(get());//thelineshowingupaserror我收到错误“参数1没有从‘constFoo*’到‘Foo*const&’的已知转换”。我想我在阅读这些类型时遇到了麻烦,因为我不知道我应该怎么做才能完成这项工作。根据我的阅读,const关键字适用于其左侧的类型,但顶级cons

C++ 构造函数的乐趣——用自身的拷贝构造 Foo

我有:classFoo;classBar{Foofoo;Bar():foo(foo){};}Barbar;此时,是bar.foo//[这个问题源于一个错误的引用计数指针实现;我可以发誓我确保每个指针都指向非空的东西;但我最终得到了一个指向NULL的指针。] 最佳答案 一旦您进入构造函数的主体,foo就会完全初始化(这是有保证的一般情况;特别是当它在初始化列表中完成初始化后。)在你的例子中,你是从一个非构造的对象复制构造的。根据§12.7/1(谢谢你,gf),这会导致未定义的行为:Foranobjectofnon-PODclassty

c++ - 为什么我不能用 foo(char* args[]) 做 foo({"asd","asd1"})?

我正在阅读C++Primer,在第6.2节中它说:"Parameterinitializationworksthesamewayasvariableinitialization."然而当我这样做时:voidfoo(char*args[]){return;}intmain(){char*args[]={"asd","dsa"};//ok.foo({"asd","dsa"});//error.}这是为什么? 最佳答案 作为@T.C.在评论中指出,函数参数中的args被转换为char**因为函数不能将数组作为参数。既然你做不到char**

c++ - 在包 BAR 中使用 R 包 FOO 中的 C++ 代码的最佳方法

我正在尝试使用Rcpp定义一个函数来加速。情况如下:我有一个FOO包,里面有很多C++代码(我自己的包,目前没有使用Rcpp),它定义了一组函数,例如foo_a和foo_b。在另一个包BAR(使用Rcpp)中,我正在定义一个函数(使用Rcpp属性),我想在其中调用函数foo_a和foo_b。我该如何解决这个问题?在其他帖子中看了一下我发现我以某种方式在FOO中包含头文件并在BAR中使用属性//[[Rcpp::depends(FOO)]],但我似乎错过一些点。有关如何操作的任何提示?最好的拉斯编辑:感谢您的评论,我喜欢KevinUshey的方法并尝试实现它。然而,经过一些编码后,我意识到

c++ - decltype(auto) foo() 在没有任何警告的情况下返回本地引用

在使用现代C++中的示例时,我编写了以下代码。#include#includestaticintcount=0;classCounter{public:Counter(){++count;};Counter(Counter&r){++count;};Counter(Counter&&r){++count;};~Counter(){--count;};voidfoo(){};};decltype(auto)foo_warn(){Counterc;return(c);//Warningaboutreturninglocalreference}decltype(auto)foo_no_war