草庐IT

forward_static_call

全部标签

c++ - 错误 : call of overloaded ‘max(int, int)’ is ambiguous

#includeusingnamespacestd;templateTmax(Tlhs,Trhs){returnlhsintmax(intlhs,intrhs){returnlhs(4,5)如何更正此错误? 最佳答案 这都是因为你的usingnamespacestd;。删除该行。通过该using指令,您将std::max(必须通过iostream以某种方式包含)带入全局范围。因此,编译器不知道调用哪个max-::max或std::max。我希望这个例子对于那些认为使用指令是免费的的人来说是一个很好的稻草人。奇怪的错误是一种副作用。

c++ - static constexpr 成员的统一初始化

根据:constexprstaticdatamembergivingundefinedreferenceerrorstaticconstexpr类成员必须满足两个要求:templatestructwrapper{staticconstexprTpvalue{};//1};templateconstexprTpwrapper::value;//2structfoo{};intmain(){autoconst&x=wrapper::value;(void)x;}在类定义内部初始化(因为它是constexpr)在类定义之外定义(因为它是静态的)如果我把1.改成统一初始化templatestr

c++ - 是否可以为不应编译的表达式表达 static_assert?

我想用以下形式表达一个static_assert:static_assert(expressionshouldnotcompile);让我添加一个完整的例子:templatestructA{};templatestructA{voida(){}};Ab;static_assert(!compile(b.a()));orstatic_assert(!compile(A::a()));因此,我们的想法是能够确保表达式(具有有效语法)不会被编译。如果可能的话,如果解决方案只使用C++11会更好。 最佳答案 好的,考虑到您问题的上下文有些模

c++ - SFINAE: 'static_cast<void>()' 或 ', void()'?

在任意类型上执行SFINAE时,通常需要将表达式的结果转换为void。我见过两种方法;转换为无效:(void)(expr)//orstatic_cast(expr)或者,或者,使用带有voidprvalueRHS的逗号运算符:(expr),void()据我了解,在这两种情况下,expr都会被求值(为了格式良好,在非求值上下文中)并丢弃结果(或结果类型,在非求值上下文中);在任何一种情况下,即使是病态类T也无法覆盖T::operatorvoid()或operator,(T,void)。(参见:Whyis"operatorvoid"notinvokedwithcastsyntax?、Wha

c++ - 视觉 C++ : forward an array as a pointer

我已经将一些无法在VisualStudio2015上编译的C++11代码缩减为以下我认为应该编译的代码(并且使用clang和gcc):#includevoidtest(constchar*x);intmain(){constcharx[]="Helloworld!";test(std::forward(x));}我知道这里不需要调用forward。这是从一段更复杂的代码中删除的,该代码将可变参数中的任何数组衰减为指针并转发所有内容。我确信可以通过模板特化或SFINAE找到解决此问题的方法,但我想在走那条路之前知道它是否有效的C++。编译器是VisualStudio2015,问题可以重现

c++ - extern "C"static void* 函数

在阅读了extern和static之后,我很困惑地遇到了具有以下行的代码:extern"C"staticvoid*foo(int*a){returnfoo1(a);}为什么这不会产生任何错误? 最佳答案 以下内容也编译并执行与您的行相同的操作:extern"C"{staticvoid*foo(int*a){returnfoo1(a);}}static意味着foo()将只在文件范围内可用,当它出现时它会覆盖extern"C"到联动。通常,extern"C"会影响链接器在导出时使用的函数的名称,以便在链接整个程序时可以从其他目标文件调用

c++ - dynamic_cast vs static_cast 无效*

在下面程序的最后两行中,static_cast和dynamic_cast表现不同。据我了解,dynamic_cast的结果始终解析为完整对象的地址。所以它以某种方式使用了RTTI。谁能解释一下编译器如何使用RTTI来区分两者。#includeusingnamespacestd;classTop{protected:intx;public:Top(intn){x=n;}virtual~Top(){}friendostream&operator(&b)(&b);cout(p)(p)可能的输出:https://ideone.com/WoX5DI281,2,3,40xbfcce60410xbf

Java SE 封装、包、static关键字和代码块

1.封装1.1封装的概念面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说就是套壳屏蔽细节。封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互1.2封装之访问限定符一般我们封装用到的访问限定符:pritaveclassStudent{privateStringname;privateintage;publicvoidexam(){System.out.println(this.name+"正在考试中");}}publicclassMain{publicstaticvoidmain(String[]

c++ - 是否所有 C++ 编译器都允许使用 static const int 类成员变量作为数组绑定(bind)?

在VC++中,当我需要为类成员变量指定一个数组绑定(bind)时,我会这样做:classClass{private:staticconstintnumberOfColors=16;COLORREFcolors[numberOfColors];};(请不要告诉我这里使用std::vector)这样我就有了一个常量,可以用作数组绑定(bind),稍后在类代码中指定循环语句约束,同时它在其他任何地方都不可见。问题是staticconstint成员变量的这种用法是否只被VC++允许,还是通常被其他广泛使用的编译器允许? 最佳答案 这是有效的

c++ - 为什么要为 std::forward_list 拼接整个列表或线性范围?

将范围从一个列表拼接到另一个列表可以在常数时间内完成,但代价是使size()的复杂度呈线性。C++11改变了std::list的情况,要求size()为常数时间。例如,这破坏了gcc的实现,参见[C++0x]std::list::sizecomplexity.除了splice()范围外,还有什么其他原因size()不能成为常量时间在早期,C++03符合std::listimplementations?为什么拼接整个列表或范围是线性的std::forward_list?参见splice_after(),案例(1)和(3)。另见standarddraftN3485中的23.3.4.6for