草庐IT

c++ - 为什么成员变量不能作为参数的默认值?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Nonstaticmemberasadefaultargumentofanonstaticmemberfunction如果我错了请纠正我,但我认为默认参数的工作方式是这样的:当编译器看到函数调用时,它开始将参数压入堆栈。当它用完参数时,它将开始将默认值压入堆栈,直到所有必需的参数都被填充(我知道这是一种简化,因为参数实际上是从右向左压入的,所以它将从默认值开始,但是想法是一样的)。如果这是真的,为什么不能将成员变量用作默认值?在我看来,由于编译器在调用站点像往常一样推送它们,它应该能够很好地解析它们!编辑因为

c++ - 为什么我不能模板重载?

为什么编译:classTestable{public:templatetypenamestd::enable_if::typevoidfoo(){couttypenamestd::enable_if::typevoidfoo(){cout但如果我像这样使用默认类型定义两个foos则不会:template::type>voidfoo(){cout::type>voidfoo(){cout我收到此错误(第一行指向(B)的定义,第二行指向(A)):error:'templatevoidTestable::foo()'cannotbeoverloadederror:with'template>

c++ - 为什么我不能将 this 指针显式传递给成员函数?

C++标准(ISOc++11)在第9.3.1节中提到Anon-staticmemberfunctionmaybecalledforanobjectofitsclasstype,orforanobjectofaclassderived(Clause10)fromitsclasstype,usingtheclassmemberaccesssyntax(5.2.5,13.3.1.1).尝试使用g++(版本4.8.2)编译此代码classfoo{public:voidbar(){cout给出编译时错误,因为它无法匹配函数的签名。考虑到标准关于调用成员函数的规定,我想这是意料之中的。由于该方法在

c++ - 为什么我不能在 C++11 中使用 constexpr 指针作为模板参数?

请考虑以下代码:templatestructH{};structAA{inti;};intmain(){typedefintAA::*PI;constexprPIpi=&AA::i;Hh1;//OK//Hh2;//compileerror}我有成员指针pi指向AA::i。pi是一个constexpr变量。为什么我不能将它用作模板参数,即使直接使用&AA::i也可以? 最佳答案 因为这些是规则,至少在C++11中是这样;14.3.2/1仅允许“指向成员的指针,如5.3.1中所述”,它描述了&AA::i语法。这在latestdraft中

c++ - 为什么不能直接定义匿名结构/类的模板化别名?

我可以创建以下内容:usingFoo=struct{/*Implementation*/};templateusingBar=Foo;但是以下是不允许的:templateusingBar=struct{/*Implementation*/};Clang的错误比GCC更有用,它指出:error:'(anonymousstructatfile:line:column)'cannotbedefinedinatypealiastemplate不允许第二个代码示例的任何原因?注意:请说明第二个代码示例(如果允许)可能导致语言问题的任何示例。标准中的任何引用也很有帮助。

c++ - 编译器什么时候不能使用 RVO 或 NRVO?

当编译器不能使用RVO时,move语义很有用。和NRVO.但是在什么情况下编译器不能使用这些特性呢? 最佳答案 答案是它取决于编译器和情况。例如。控制流分支可能会混淆优化器。Wikipedia举个例子:#includestd::stringf(boolcond=false){std::stringfirst("first");std::stringsecond("second");//thefunctionmayreturnoneoftwonamedobjects//dependingonitsargument.RVOmightno

c++ - 为什么不能覆盖涉及第三方代码的模板类的 operator<<?

我在https://stackoverflow.com/a/51951315/1908650中询问了以下内容:Iwanttooverloadtemplateostream&operator>&).在评论中,@Yakk-AdamNevraumont指出:Theanswertothatquestionis"youcannot".ThereisnogoodlegalwaytodothatforagenerictypeT;Icouldexplainwhy,butitwouldtakeanewquestion/answertodoso我正在创建一个新的Q.来接受这个提议...

不能使用导出功能,或者还可以吗?

在r软件包中,可能有一些不导出的功能,只能通过packagename:::functionname。这些功能未由包装的作者导出。这是否意味着我们由于版权而无法访问它们?如果我真的需要基于这些功能,那我该怎么办?有帮助吗?看答案未导出的功能通常是软件包的内部辅助功能。这些通常不是用于一般用法。使用它们应该很好,但是关于它们的文档可能很少或没有。

您为什么不能将字符串从合同到合同?

当试图将字符串从合同到合同传递时,我会遇到错误。在getName中带有错误。我知道您无法通过字符串,但是原因是什么?返回参数类型不访问的动态类型不是隐式转换为预期类型(类型的第一返回变量)字符串内存。返回tobeCalled.getName();pragmasolidity^0.1.0;contractToContract{FromContractfromContract=newFromContract();functiongetName()constantreturns(string){returnfromContract.getName();}}contractFromContract{s

c++ - 为什么我们不能通过类成员访问表达式使用嵌套类型?

我试图理解为什么我们不能通过类成员访问表达式使用嵌套类型。例如,我们有以下类:structU{structA{staticintv;inta;};structB{intb;};};Ua;typedefa.AT;//'a'doesnotnameatypeintmain(){std::coutDEMO标准说:N3797::5.2.5/2[expr.ref]部分Forthefirstoption(dot)thefirstexpressionshallhavecompleteclasstype.Forthesecondoption(arrow)thefirstexpressionshallha