草庐IT

OPERATOR_PULL

全部标签

c++ - 如果我想让类不可复制, "operator="返回类型是否重要?

假设我有一个不支持成员复制的类,所以我不想保留编译器实现的复制构造函数和赋值运算符。我也不想实现这些,因为要么这样做需要额外的努力,我不需要在我的类里面进行这些操作,或者那些操作在我的类里面没有意义所以我想禁止他们。这样做I'lldeclarethemprivateandprovidenoimplementation:classNonCopyable{private:NonCopyable(constNonCopyable&);//notimplementedanywherevoidoperator=(constNonCopyable&);//notimplementedanywher

c++ - 使用 std::string 时为 "error: no match for ‘operator<<"

你能帮我找出下面代码中的问题吗(代码类似于C++streamasaparameterwhenoverloadingoperator):#include#includeclasslogger{public:voidinit(std::ostream&ostr){stream=&ostr;}templatelogger&operator一切正常,直到我取消注释包含“world”的行。在这种情况下,GCC产生错误:在...中与“operator有意思的是VS2008对这段代码没有问题谢谢! 最佳答案 std::string("world"

C++ move 语义 : why copy assignment operator=(&) is called instead of move assignment operator=(&&)?

我有以下代码:#include#includeusingstd::cout;structSomeType{SomeType(){}SomeType(constSomeType&&other){cout我希望move构造函数调用move赋值运算符。下面是这个程序的输出:SomeType(SomeType&&)operator=(constSomeType&)operator=(SomeType&&)如您所见,move赋值运算符已成功调用,但在move构造函数内分配给*this时未成功调用。为什么会发生这种情况,我能以某种方式解决它吗? 最佳答案

c++ - 为什么以及如何重载 operator<< 用于打印

我写了一个实现栈的程序。我有一个显示功能。一开始我是这样写display函数的:templatevoidMystack::display(){for(inti=0;i然后开发人员建议我写一个显示功能更通用。所以我把显示函数写成:templatevoidMystack::display(std::ostream&os)const{for(inti=0;i根据我的理解,编写上述函数的好处是现在我有一个通用的显示函数,我也可以使用它来显示数据到控制台或文件。问题一:我的理解是否正确?现在另一个建议是编写如下函数:templatefriendstd::ostream&operatorconst

c++ - 为什么重载 ostream 的 operator<< 需要引用 "&"?

我一直在学习C++。Fromthispage,我知道可以通过这种方式重载ostream的“ostream&operator和friendostream&operator我的问题是……为什么这个函数需要在ostream和Object的末尾加上“&”?至少我知道“&”是用来...取一个值的地址声明一个类型的引用但是,我认为它们都不适用于上述重载。我花了很多时间在谷歌上搜索和阅读教科书,但找不到答案。任何建议将不胜感激。 最佳答案 whydoesthisfunctionneed"&"attheendofostreamandObject?因

c++ - 使用通用模板函数为 std::ostream 和 std::vector 专门化 operator<< 的最佳方法?

我遇到了标准指定的两阶段查找问题,并且由clang(正确地)实现了与operator的过载有关的问题。对于std::ostream和std::vector.考虑一个非常通用的模板函数,该函数将其参数转换为流(仅在递归时真正有用,但简单的示例足以触发问题)://generic.htemplatevoidshift(Stream&s,Arg&arg){s这个generic.h可以在整个项目中使用。然后在其他文件中,我们要输出std::vector,所以我们定义了一个重载//vector.h#include#includestd::ostream&operatorconst&v){for(a

c++ - C++11 std::string::operator[] 会返回空终止缓冲区吗

我有一个std::string类的对象,我需要将其传递给C函数,该函数通过迭代它并搜索操作char*缓冲区空终止符。所以,我有这样的东西://Cfunctionvoidfoo(char*buf);//C++codestd::stringstr("str");foo(&str[0]);假设我们使用C++11,那么我们可以保证std::string表示具有连续存储的字符。但我想知道是否有任何保证&str[0]将指向以\0结尾的缓冲区?是的,有c_str成员函数,但我说的是operator[]。有人可以引用标准吗? 最佳答案 在实践中,是

c++ - Operator = 在 C++ 中使用 Const 变量重载

我想知道你们是否可以帮助我。这是我的.h:ClassDoctor{conststringname;public:Doctor();Doctor(stringname);Doctor&Doctor::operator=(constDoctor&doc);}和我的主要:intmain(){Doctord1=Doctor("peter");Doctord2=Doctor();d2=d1;}我想执行operator=函数。谁能帮我?注意Doctor上的const成员。************编辑:*********我的主要问题是我希望另一个类具有一个Doctor属性,就像Pacient有一个D

c++ - 显式 operator= call (T::operator=)

我正在阅读qt源代码,我已经多次看到这样的代码:buttonOpt.QStyleOption::operator=(*opt);所以,我猜它类似于buttonOpt=*opt但为什么他们使用这种语法而不是默认和用户友好的语法?这是更快还是存在任何其他利润? 最佳答案 这是因为它们显式地从buttonOpt的基类调用operator=,即QStyleOption。buttonOpt.QStyleOption::operator=(*opt);//similarbehaviorclassBase{public:virtualboolop

c++ - std::stringstream 如何处理 operator<< 中的 wchar_t*?

鉴于以下代码段无法编译:std::stringstreamss;ss我也不认为这个会:std::stringstreamss;ss但确实如此(至少在VC++上)。我猜这是由于以下ostream::operator过载:ostream&operator如果我不小心混合了字符类型,这是否有可能悄悄地破坏我的代码? 最佳答案 是的-您需要wstringstream用于wchar_t输出。您可以通过不使用字符串文字来缓解这种情况。如您所述,如果您尝试将constwstring&传递给stringstream,它将无法编译。