草庐IT

compound-operator

全部标签

c++ - STL operator= Visual Studio 2010 的行为发生变化?

我正在尝试使用VisualStudio2010(C++)编译QtScriptGenerator(gitorious),但遇到了编译错误。在寻找解决方案的过程中,我偶尔会看到自VS2008以来由于VS2010的STL实现的变化和/或c++0x一致性变化而引入的编译破损。知道下面发生了什么,或者我该如何解决它?如果有问题的代码似乎是QtScriptGenerator的,我想我会更容易修复它。但在我看来,有问题的代码可能在VS2010的STL实现中,我可能需要创建一个解决方法?附言。我对模板和STL很陌生。我有嵌入式和控制台项目的背景,这些项目直到最近才经常被避免以减少内存消耗和交叉编译器风

c++ - 重载 operator<< 以在不使用友元函数的情况下输出对象成员

隔了很长时间我正在刷新cpp,试图理解运算符重载方法。我试图重载“operator这是我的类定义:classAdd{private:intx;public:friendostream&operator函数实现//Method1ostream&operator主函数调用cout现在我的问题是,我想在不使用friend函数的情况下实现方法1的类型调用。但是不知道,在cpp中可不可以。我尝试了很少的实现,但都给我编译错误。请帮助我理解我在这里遗漏的要点。 最佳答案 如果你的类中有公共(public)访问函数,或者stream-就像一个,你

c++ - 澄清智能指针的 operator* 和 operator-> 重载

自从我使用C++以来它已经通过了很多,所以这里是(可能是愚蠢的)问题:一个基本的智能指针对象应该表现得像一个普通的指针对象,所以在典型的实现中,我们向对象添加*和->运算符,就像这样:templateclassauto_ptr{T*ptr;public:explicitauto_ptr(T*p=0):ptr(p){}~auto_ptr(){deleteptr;}T&operator*(){return*ptr;}T*operator->(){returnptr;}//...};现在,据我所知,c++*运算符(取消引用)代表:“通过ptr的值获取堆中指向的值”(对吗?),以及类型*ptr

c++ - c++ operator |= atomic 是多核处理器吗?

我目前正在与另一位开发人员争论,他向我保证以下c++语句是原子的:x|=0x1;//xissharedbymultiplethreads在Release模式下用VC++11编译生成以下程序集:01121270ordwordptrds:[1124430h],1另一个开发者说位操作是原子的,因此是线程安全的。我对英特尔i7处理器的体验与此相反。我认为对于多核处理器,任何共享内存写入都是不安全的,因为有单独的处理器缓存。但经过更多研究后,似乎x86处理器提供了一些与处理器/内核之间的内存操作顺序相关的保证,这表明它应该是安全的......同样,这不是根据我的经验,情况似乎是这样。由于我没有关

c++ - 通过 operator[] 访问静态成员 unordered_map

作为C++的新手,我遇到了一些我不太理解的行为,并且即使通过大量谷歌搜索也无法找到解释,所以我希望有人能解释这里到底出了什么问题。//test.h#includetypedefstd::unordered_maptest_type;classtest{public:staticconsttest_typetmap;};//test.cpp#include"test.h"consttest_typetest::tmap={{1,1}};//main.cpp#include"test.h"intmain(){//Attempt1:accesskeyviaoperator[]std::cou

c++ - operator[] for std::map 什么情况下可以返回0?

我正在使用LLVM,但我遇到了以下我没有编写的代码段的问题:staticstd::mapNamedValues;...//LotsofothercodeValue*V=NamedValues["Demostring"];returnV?V:ErrorV("VisnotinNamedValuesmap.");根据我对std::map的理解,它永远不应该返回空指针(除非它内存不足?),所以我很难理解V为0如何表示V不在映射中。照原样,我的程序总是在这里出错,但我不明白为什么。对这里发生的事情有什么帮助吗? 最佳答案 std::map::

c++ - 重载 operator= 中断 std::sort

可能是个骗子,但我找不到。在用双节棍敲打我的键盘两天后,我发现重载等号运算符(operator=)显然会破坏std::sort。也许我错误地重载了operator=?这是我的MCVE:#include#include#include#include#include#includestructPerson{std::stringname;uint32_tage;booloperatorage&people){std::coutpeople={{"james",12},{"jada",4},{"max",44},{"bart",7}};PrintPeople(people);std::so

C++ 为两个 double 重载 operator%

是否可以为两个double重载operator%?constdoubleoperator%(constdouble&lhs,constdouble&rhs){returnfmod(lhs,rhs);}当然,这会产生错误,因为两个参数之一必须具有类类型。所以我考虑利用C++隐式构造函数调用的可能性来解决这个问题。我是通过以下方式做到的:classMyDouble{public:MyDouble(doubleval):val_(val){}~MyDouble(){}doubleval()const{returnval_;}private:doubleval_;};constdoubleop

c++ - 是否可以在 C++ 中声明 operator= private 并同时由编译器合成

我对运算符=很满意,它由编译器自动合成。但我希望它是私有(private)的,并且不想用类型的页面长定义来膨胀我的代码Foo&Foo::operator=(constFoo&foo){if(this==&foo)return*this;member1_=foo.member1_;member2_=foo.member2_;member3_=foo.member2_;...member1000_=foo.member1000_;return*this;}请问有什么办法吗? 最佳答案 在C++11中是:classFoo{Foo&oper

c++ - 如何在 C++ 中将 operator= 与匿名对象一起使用?

我有一个带有重载运算符的类:IPAddress&IPAddress::operator=(IPAddress&other){if(this!=&other){deletedata;this->init(other.getVersion());other.toArray(this->data);}return*this;}当我尝试编译时:IPAddressx;x=IPAddress(IPV4,"192.168.2.10");我收到以下错误:main.cc:Infunction‘intmain()’:main.cc:43:39:error:nomatchfor‘operator=’in‘x