草庐IT

forward-declaration

全部标签

c++ - std::forward() 的右值引用重载的目的是什么?

我正在尝试完美转发,我发现std::forward()需要两个重载:重载nr。1:templateinlineT&&forward(typenamestd::remove_reference::type&t)noexcept{returnstatic_cast(t);}重载nr.2:templateinlineT&&forward(typenamestd::remove_reference::type&&t)noexcept{static_assert(!std::is_lvalue_reference::value,"Cannotforwardanrvalueasanlvalue."

c++ - 为什么 std::forward 返回 static_cast<T&&> 而不是 static_cast<T>?

让我们有一个名为Y的重载函数:voidY(int&lvalue){cout现在,让我们定义一个类似于std::forward的模板函数templatevoidf(T&&x){Y(static_cast(x));//Usingstatic_cast(x)likeinstd::forward}现在看看main()intmain(){inti=10;f(i);//lvalue>>T=int&f(10);//rvalue>>T=int&&}正如预期的那样,输出是lvalue!rvalue!现在回到模板函数f()并替换static_cast(x)与static_cast(x).让我们看看输出:l

c++ - 带有 Cygwin 1.7 的 GoogleTest 1.6 编译错误 : 'fileno' was not declared in this scope

带有Cygwin1.7的GoogleTest1.6:“fileno”未在此范围内声明在EclipseCDT中对Factorial()函数进行简单测试时出现错误消息:Invoking:CygwinC++Compilerg++-std=c++0x-DGTEST_OS_CYGWIN=1-I"E:\source\gtest-1.6.0\include"-O0-g3-Wall-c-fmessage-length=0-MMD-MP-MF"src/challenge.d"-MT"src/challenge.d"-o"src/challenge.o""../src/challenge.cpp"Infi

C++ 错误 : Sleep was not declared in this scope

我在Ubuntu中使用带有codeBlocks的C++,在GCC4.7中boost1.46[yield_k.hpp]我得到这个编译时错误:error:Sleepwasnotdeclaredinthisscope代码:#includeusingnamespacestd;intmain(){cout如何解决此错误?我希望程序挂起1秒。 最佳答案 Sleep是一个Windows函数。对于Unix,请考虑使用nanosleep(POSIX)或usleep(BSD;已弃用)。一个nanosleep示例:voidmy_sleep(unsigne

c++ - 使用 std::forward 的构造函数

据我所知,在C++11中高效实现构造函数的两种常用方法是使用其中的两种Foo(constBar&bar):bar_{bar}{};Foo(Bar&&bar):bar_{std::move(bar)}{};或者只是一种Foo(Barbar):bar_{std::move(bar)}{};使用第一个选项可实现最佳性能(例如,希望在左值的情况下为单个拷贝,在右值的情况下希望为单个move),但需要对N个变量进行2N重载,而第二个选项只需要一个函数,代价是传入左值时需要额外move。在大多数情况下,这不会产生太大影响,但肯定这两种选择都不是最佳选择。但是,也可以执行以下操作:templateF

c++ - 用于解析 C 和 C++ 声明的螺旋规则和 'declaration follows usage'

此问题跟随thisotherquestionaboutCdeclarations.阅读这个问题的答案,我读到了spiralrule而且我也理解了“声明遵循用法”的含义。到目前为止还可以。但后来我读到thisdeclaration:char*(*(*a[N])())();我想知道如何使用“声明遵循用法”“规则”来解析它。尤其是数组部分。我读的是:(*(*a[N])())是一个函数()返回一个char*,然后,解引用以下(*a[N])()//1这个'函数返回一个char*',所以1是一个'指向返回char*的函数的指针'那么我会说'当(*a[N])被调用时,它是[previousdecla

c++ - std::forward_list 和 std::forward_list::push_back

我想使用std::forward_list因为:Forwardlistisacontainerwhichsupportsfastinsertionandremovalofelementsfromanywherefromthecontainer但是没有*std::forward_list::push_back*实现。是否有一种高性能的方式来添加对单或无理由的支持? 最佳答案 我建议反对std::forward_list就像我在几乎所有情况下反对std::list一样。就个人而言,我从来没有在我的代码中发现链表是最好的数据结构。在C++

c++ - 在 using-declaration 中,依赖名称可以在模板替换后呈现给构造函数吗?

在这个例子中:templatestructS:T{usingT::X;};T::X是指成员X的从属名称在T.如果S用T=X实例化:structX{X(int){}};...Ss(42);using-declaration会变成inheriting-constructor吗?Clang拒绝代码DEMO,而g++接受它。请注意,如果我们写:usingT::X::X;两个编译器都接受代码并将其视为继承构造函数。是usingT::X允许按标准成为继承构造函数吗? 最佳答案 感谢T.C.指出这一点:Coreissue2070正处于起草阶段(已

c++ - using-declaration 不能在函数范围内重复。这是为什么?

在[namespace.udecl]/10中有以下示例:namespaceA{inti;}namespaceA1{usingA::i;usingA::i;//OK:doubledeclaration}voidf(){usingA::i;usingA::i;//error:doubledeclaration}这段代码在clang中编译。 最佳答案 第一个是命名空间内的声明,多个using语句可能经常使用#includes发生。第二个是在函数的定义中,除非你犯了错误,否则你永远不会这样做。例如,您也不能将同一个符号定义两次,但可以声明多

c++ - 为什么静态成员函数_declared_是静态的,而在C++中却是_defined_?

这是一个最小的工作示例:啊哈:classA{staticinta_member_function();};A.cpp#include"A.h"intA::a_member_function(){return5;}intmain(){return1;}这段代码编译并运行,但是,在我看来:staticintA::a_member_function(){return5;}可以很容易地用于定义类A的静态成员函数。事实上,有这个要求似乎实际上是相当有用的,因为它会提醒.cpp文件的读者a_member_function是静态的.但是,这显然行不通:error:cannotdeclaremembe