草庐IT

numeric_traits_integer

全部标签

c++ - 函数模板 : Different specializations with type traits

考虑到类模板,可以使用类型特征和虚拟启动器模板参数为某些类型的组提供模板特化。我已经askedthatearlier.现在,对于函数模板,我需要同样的东西:即,我有一个模板函数,并且想要对一组类型进行特化,例如,作为类X的子类型的所有类型>。我可以用这样的类型特征来表达这一点:std::enable_if::value>::type我想过这样做:templatevoidfoo(){//Dosomething}templatevoidfoo::value>::type>(){//Dosomethingdifferent}但是,这不起作用,因为函数模板不允许偏特化。那怎么办呢?也许是类型特

c++ - 用于积分的 std::numeric_limits<T>::epsilon()

关于std::numeric_limits我没有任何好的引用,但网上的网站说std::numeric_limits::epsilon()将返回1之间的差异和它之后的最小数字。据我所知int类型,1之后的下一个数字是2,所以epsilon应该是1.但它是0(Linux,g++4.4.5)。这背后的原因是什么?我知道在实践中epsilon()仅对浮点类型有用,我只是吹毛求疵。 最佳答案 标准说([numeric.limits.members])Meaningfulforallfloatingpointtypes.标准还说([numeri

c++ - std::is_signed<T> 和 std::numeric_limits<T>::is_signed 之间的区别?

两者都是std::is_signed和std::numeric_limits::is_signed应该给出关于T的签名的答案.为什么现在有两个符号指示符(即自C++11起)? 最佳答案 我敢猜测唯一的区别是如果std::numeric_limits专门用于用户定义的类型。这样的用户定义类型当然可以为is_signed提供自己的值。.但要求std::is_signed::value在这种类型上将始终返回false除非std::is_signed已独立特化。似乎std::is_signed的条件代表是is_arithmetic::val

c++ - 可变参数模板 : Perfect forwarding of integer parameter to lambda

有类似的问题,但我没有找到适合我的问题的答案。考虑以下代码:#include#include#include#include#includeclassTestClass{public:TestClass(intvalue):mValue(value){}private:intmValue;};templateclassDeferredCreator{public:templateDeferredCreator(Args&&...args):mpCreator([=]()->T*{returnnewT(std::forward(args)...);}),mpObject(){}T*get

c++ - 从 ‘void’ 到非标量类型的转换‘std::pair<std::basic_string<char, std::char_traits<char>

我在电子表格obj中有一堆对:std::stack>undoStack;我正在尝试弹出堆栈并将其分配给另一对:std::pairchange=spreadsheets.at(i).undoStack.pop();我收到这个错误:error:conversionfrom‘void’tonon-scalartype‘std::pair,std::allocator>,std::basic_string,std::allocator>>’requested这里出了什么问题? 最佳答案 stack::pop()返回void但您正试图将其分配

c++ - std::make_integer_sequence 究竟是如何实现的?

我正在观看C++11/14元编程演讲,其中描述了常见算法和tmp模式的一些有效替代方案。大部分效率提升来自使用可变参数模板而不是递归遍历,在许多情况下,使用可变参数模板的方法是扩展通过索引技巧或其他std::integer_sequence实例化技巧。由于这种效率来自实例化std::integer_sequence的事实,特别是别名std::make_integer_sequence不是一项昂贵的任务,我想确保当前最先进的C++1y标准库实现效率足以使make_integer_sequence实例化不是一项复杂且耗时/内存的任务。std::make_integer_sequence在C

c++ - "*(pointer + integer)"在 C++ 中有什么作用?

我对这个程序中一行代码的作用感到困惑:int*temp=newint[cap];intnum=0;for(inti=name;iname、number和foo是全局变量(foo是指针),cap是一个参数。具体来说,我不明白这一行:*(temp+count)=*(foo+i);为什么会有指向括号的指针,这有什么作用? 最佳答案 *(temp+count)=*(foo+i);+运算符执行指针运算。将一个整数添加到一个指针值会产生一个新指针,该指针在原始指针之后递增了指定数量的对象。例如,如果p是指向arr[0]的指针,则p+2指向arr

c++ - std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n' ) 使用#include <Windows.h> 时出错

这个问题在这里已经有了答案:std::max-expectedanidentifier(6个答案)macro"max"requires2arguments,butonly1given(4个答案)关闭去年。在VisualStudio2010Pro中,我在max()上收到一个编译错误,指出“需要一个标识符”命令的一部分。似乎在windows.h头文件中有一个max(a,b)标识符和编译器想要使用它。我尝试使用#include也一样,但这并没有解决问题。有什么办法可以解决这个问题吗?

c++ - 为什么专门化 type_trait 会导致未定义的行为?

讨论根据标准§20.10.2/1Header概要[meta.type.synop]:1Thebehaviorofaprogramthataddsspecializationsforanyoftheclasstemplatesdefinedinthissubclauseisundefinedunlessotherwisespecified.这个特定的子句与STL应该是可扩展的一般概念相矛盾,并阻止我们扩展类型特征,如下例所示:namespacestd{templatestructis_floating_point>:std::integral_constant::type>::value

c++ - 为什么标准同时提供了 is_integer 和 is_exact?

std::numeric_limits提供了2个互斥的常量:is_integer:“true对于所有整数算术类型T”is_exact:“true对于所有使用精确表示的算术类型T”是否存在非精确整数类型的可能性?在这里允许做什么?在我知道我是否正在处理精确数字的所有模板中,我使用了is_integer,我现在是否还需要添加对is_exact的检查? 最佳答案 来自is_exactcppreference页面:NotesWhileallfundamentaltypesTforwhichstd::numeric_limits::is_ex