草庐IT

numeric_operation

全部标签

c++ - std::numeric_limits<double>::min() 上的错误 C2589

当我尝试编译一些代码(不是我自己的代码)时,我得到一个C2589'(':'::'右侧的非法标记在这一行:maxPosition[0]=std::numeric_limits::min();我想这是因为已经定义了一个min()宏,但为什么编译器不从指定的命名空间中获取min()而不是宏? 最佳答案 butwhyisthecompilernottakingthemin()fromthespecifiednamespaceinsteadofthemacro?因为宏不关心您的namespace、语言语义或您的编译器。预处理首先发生。换句话说

c++ - 如果重载 operator== 是否还需要重载 operator!=?

我正在使用BOOST_STRONG_TYPEDEF宏,它创建了一个重载operator==的类。我想知道是否还需要重载operator!=? 最佳答案 回答:没有!原因(一开始我没有注意到)是BOOST_STRONG_TYPEDEF使用了Boost运算符(http://www.boost.org/doc/libs/1_38_0/libs/utility/operators.htm),特别是totally_ordered1和totally_ordered2。因此,小于和相等比较运算符已为您实现。

c++ - 这是 std::bitset::operator^= 和 std::bitset::count 的正常行为吗?如果是这样,为什么?

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭4年前。Improvethisquestion记录在案here,std::bitset::operator^=返回*this。从这一点以及对诸如+=,|=,*=等运算符的“通常”解释,我们可以合理地假设给定的std::bitset实例(相同size)a和b,表达式(a^=b).count()将存储按位XOR的结果a中的操作,count()将返回

c++ - std::vector::insert 与 std::list::operator[]

我知道std::list::operator[]没有实现,因为它的性能很差。但是std::vector::insert和std::list::operator[]一样低效。背后的解释是什么? 最佳答案 std::vector::insert的实现是因为std::vector必须满足SequenceContainerconcept的要求,虽然operator[]不是任何概念(据我所知)所必需的,但可能会在c++17的ContiguousContainer概念中添加。所以operator[]被添加到可以像数组一样使用的容器中,而inse

c++ - 为什么 {} 用于访问 std::hash 中的 operator()?

在阅读用于std::unordered_map的std::hash示例时,我注意到{}正在访问operator()函数。http://en.cppreference.com/w/cpp/utility/hashresult_typeoperator()(argument_typeconst&s)const{result_typeconsth1(std::hash{}(s.first_name));result_typeconsth2(std::hash{}(s.last_name));returnh1^(h2这里使用{}代表什么? 最佳答案

c++ - 如何避免 C++ 中 operator== 实现的错误?

我经常有提供简单的逐个成员比较的类:classApplicationSettings{public:booloperator==(constApplicationSettings&other)const;booloperator!=(constApplicationSettings&other)const;private:SkinTypem_ApplicationSkin;UpdateCheckIntervalm_IntervalForUpdateChecks;boolm_bDockSelectionWidget;//Addfuturememberstooperator==};bool

c++ - 为什么我可以在临时 std::ofstream 对象上使用 `operator<<`?

根据C++标准,您不能将临时变量绑定(bind)到非常量引用。由于流输出操作符定义为templatestd::basic_ostream&operator&os,conststd::basic_string&str);我希望它不能在临时流对象上调用。然而,我尝试了以下并得到了意想不到的结果#includestd::ostream&print(std::ostream&stream){stream这在GCC主干、Clang主干和MSVC19上编译。我什至在前两个上尝试了-pedantic-errors。虽然从技术上讲这三者都错了,但我很可能误解了什么。有人可以在标准中找到关于这是否合法的

c++ - Operator() 的部分特化

我的一个类声明了一个模板函数:templateAdo_something(conststd::vector&data)我想部分专注于typenameA。B是一个类型家族,实现了一个非常小的接口(interface),我们经常使用它们,所以我希望我的特化在B上是通用的。我怀疑这是双重烦恼,因为typenameA仅用作返回类型。从互联网上,我了解到我不能部分特化一个函数,所以我创建了一个类,如下所示:templateclassdo_something_implementation{public:do_something_implementation(conststd::vector&dat

c++ - 使用默认值而不是异常来 boost numeric_cast<>?

每当boost的numeric_cast转换失败,抛出异常。boost中是否有类似的模板让我指定一个默认值,或者在这种情况下捕获异常是我唯一能做的?我不太担心所有额外异常处理的性能,但我宁愿使用标准模板也不愿编写无用的包装函数。另外,根据以往的经验,我认为boost很有可能真的有我想的,只是一直没有找到。 最佳答案 numeric_cast函数只是调用boost::numeric::converter具有默认参数的模板类。其中一个参数是OverflowHandler,默认值为def_overflow_handler,但您可以指定si

c++ - 如何使用 QVector at 或 operator[] 获取指向元素的指针

我很想得到一个指向QVector元素的指针,这样我就可以在别处使用该对象,但是at()方法给了我一个constT&值和operator[]给我一个T&值。我对如何使用它们来获取指针感到困惑,以便我将使用相同的对象而不是使用复制构造函数。 最佳答案 AT&value不是拷贝,它是reference.引用看起来很像指针:它们很轻,可用于修改底层对象。只是,您使用它们的语法与直接对象相同(使用点而不是箭头),以及您可能希望在本文中查看的其他一些差异。要编辑当前在Vector中的对象,您可以使用例如vector[i].action();.这