草庐IT

output_type

全部标签

c++ - 铿锵错误 : non-type template argument refers to function that does not have linkage -- bug?

我有一些非常简单的(C++11)代码,最新的clang(version3.4trunk187493)无法编译,但GCC编译正常。代码(下面)实例化函数模板foo使用局部函数类型Bar然后尝试将其地址用作类模板Func的非类型模板参数:templatestructFunc{};templateexterninlinevoidfoo(){usingFoo=Func>;}intmain(){structBar{};//function-localtypefoo();return0;}clang发出以下错误:error:non-typetemplateargumentreferstofunct

c++ - 重载运算符 : const vs non-const return type : any difference of performance?

如果我们去维基百科article关于C++运算符,我们有一个例子:Addition:a+b->TT::operator+(constT&b)const;因此运算符返回类型为T的非常量。如果我们看这个guideline作者说返回类型应该是const以避免以下语法:(a+b)=c现在假设我不介意这种语法,并考虑a和b是大数组。从“纯”性能的角度来看,返回类型中缺少const关键字是否会阻止编译器的优化(g++和带有-O3的英特尔icpc)?如果答案是"is",为什么? 最佳答案 这是一个有趣的问题。在C++03中,没有更好的机会使用这两

c++ - Const temporary from template type 以及为什么使用 std::add_const?

以下代码摘自cppreference.com.#include#includestructfoo{voidm(){std::coutvoidcall_m(){T().m();}intmain(){call_m();call_m::type>();}但是,当使用VC++Nov2012CTP编译时,输出为Non-cvNon-cv而不是预期的:Non-cvConst另外,下面两个语句有什么区别:call_m();和call_m::type>(); 最佳答案 这似乎是MSVC的一个错误。使用T()形式的表达式(就标准而言,这是一种显式类型转

C++11/14 : How to remove a pointer-to-member from a type?

在C++11或C++1y/14中:给定一个TC::*形式的指向成员类型的值,我想得到指向类型例如:#includeusingnamespacestd;structT1{staticvoidf(){coutstructV;templatestructV{staticconstexprT1U1::*pm=&U1::x;};templatestructV{staticconstexprT2U2::*pm=&U2::x;};templatevoidf(Wpm){typedef???T;T::f();}intmain(){f(V::pm);f(V::pm);}有没有办法做到这一点?上面的???是

c++ - CTRP 派生类中没有名为 'type' 的类型

我一直在试验CuriouslyRecurringTemplatePattern对于通用的单参数仿函数,有两种实现:一种使用有效的模板模板参数,另一种我尝试在接口(interface)类中访问派生的Functor::type。在后一个示例中,编译器(gcc5.4.0)报告error:notypenamed'type'in'structCube'templateclassFunctor>classFunctorInterface_1{private:constFunctor&f_cref;public:FunctorInterface_1():f_cref(static_cast&>(*t

c++ - 错误 : Expression must have integral or unscoped enum type

#include#include#include#include#includeusingnamespacestd;intmain(){floatsize;floatsumNum=0;floatmaxNum,minNum;floatmean;floattotalDev=0;floatdevSqr=0;floatstdDev;//Createauserinputsizestd::cout>size;float*temp=newfloat[size];//Gettinginputfromtheuserfor(intx=1;x>temp[x];}//Outputofthenumbersins

c++ - 错误 : Qualifiers dropped in binding reference of type x to initializer of type y

为什么下面会抛出这个错误:IntelliSense:qualifiersdroppedinbindingreferenceoftype"string&"toinitializeroftype"conststring".hclassA{public:wstring&GetTitle()const;private:wstringtitle;};.cppwstring&GetTitle()const{returnthis->title;}如果我删除const词,它就会停止提示,但我从未对变量进行任何更改? 最佳答案 通过返回对类成员的非c

c++ - 为什么 C++1* 仍然需要 template 关键字来代替 Full Duck Typing

很多年前,(至少对我而言)静态C++多态性似乎是连贯的。Python等语言依赖ducktyping,你有:deffn(foo,bar):foo.baz(bar.bo())当时的想法是,如果它适本地“嘎嘎叫”,那么语言就没问题。相反,在C++中,您必须解释它是什么“动物”:voidfn(foo_typefoo,bar_typebar);对于“家庭王国”,您明确需要使用template关键字:templatevoidfn(Foofoo,Barbar);具有像auto...()->decltype这样的新功能返回类型,尤其是genericlambdas,似乎有一些更像是非模板Python类的

c++ - 定义两个变量 : Is "Type a(arg), b(arg);" completely equivalent to "Type a(arg); Type b(arg);"?

假设我想定义两个{Type}类的变量。构造函数采用1个参数。下面两种方式是否完全等价(编译成相同的目标代码)?Typea(arg),b(arg);和Typea(arg);Typeb(arg);这个问题是在我阅读了一个讨论异常安全的页面后出现的---http://www.gotw.ca/gotw/056.htm有一个指南“在其自己的代码语句中执行每个资源分配(例如,新的),立即将新资源提供给管理器对象。”它举了一个例子:以下代码段是安全的auto_ptrt1(newT);auto_ptrt2(newT);f(t1,t2);但是下面这行是不安全的f(auto_ptr(newT),auto_

c++ - "const T& operator[](size_type i)"中的 const 有什么用?

我在一本书http://www.acceleratedcpp.com/中发现了这个有趣的行-资源-第11章-Vec.h(我是一个std::vector翻版)而且我真的不明白这个版本的运算符有什么用。为什么要定义此运算符的两个版本(常量和非常量)?我什至试过了,在我看来,非常量版本一直被调用......你能解释一下吗?#include#include#include#includeusingnamespacestd;templateclassVec{public:typedefT*iterator;typedefconstT*const_iterator;typedefsize_tsiz