草庐IT

OPERATOR

全部标签

c++ - 为什么在 std::cout 上显式调用 operator<< 会导致意外输出?

我只是好奇如果我调用operator会发生什么在std::cout明确地因为我了解到a.operator()与a()完全相同.所以我这样做了,它打印出一些奇怪的东西:#includeusingstd::cout;intmain(){cout.operatorOutput:0x80486a0奇怪的是,它会输出一个地址(您的地址可能不同,但它仍然应该是一个地址)。我在想这是字符串的地址,所以我尝试取消引用它以使其输出字符串:*(cout.operator但是我得到一个很长的错误nomatchforoperator*in'*std::cout.std::basic_ostream我觉得这很奇

c++ - 右值需要分配哪些向后兼容性?

C++入门第5期:(代码也来自本书,此处提供了99%的上下文)#includeusingnamespacestd;intmain(){//noerrorstrings1="123",s2="aaaa";s1+s2="wow";autoa=(s1+s2).find("a");}Priortothenewstandard(hereit'ssayingC++11),therewasnowaytopreventsuchusage.Inordertomaintainbackwardcompatability,thelibraryclassescontinuetoallowassignmentto

c++ - 右值需要分配哪些向后兼容性?

C++入门第5期:(代码也来自本书,此处提供了99%的上下文)#includeusingnamespacestd;intmain(){//noerrorstrings1="123",s2="aaaa";s1+s2="wow";autoa=(s1+s2).find("a");}Priortothenewstandard(hereit'ssayingC++11),therewasnowaytopreventsuchusage.Inordertomaintainbackwardcompatability,thelibraryclassescontinuetoallowassignmentto

c++ - 重载强制转换运算符的优先级

在下面的代码中,如果由于歧义而定义了多个转换运算符,我预计会出现编译器错误。#include#includestructA{operatorconstchar*(){return"helloworld\n";}operatorfloat(){return123.0F;}//operatorint(){return49;}};intmain(){Aa;std::stringstreamss;ss相反,只要只定义了一个数字转换运算符,它就会编译而不会出现错误和警告,并且数字转换优先于operatorconstchar*()使用。声明的运算符的顺序没有区别。但是,如果operatorint(

c++ - 重载强制转换运算符的优先级

在下面的代码中,如果由于歧义而定义了多个转换运算符,我预计会出现编译器错误。#include#includestructA{operatorconstchar*(){return"helloworld\n";}operatorfloat(){return123.0F;}//operatorint(){return49;}};intmain(){Aa;std::stringstreamss;ss相反,只要只定义了一个数字转换运算符,它就会编译而不会出现错误和警告,并且数字转换优先于operatorconstchar*()使用。声明的运算符的顺序没有区别。但是,如果operatorint(

c++ - std 命名空间中的 operator<< 有什么作用?

以下代码当然可以工作(它调用std::cout::operatorcout偶然发现还有std::operatoroperator那么为什么我们需要这个操作符以及如何使用它呢?谢谢。 最佳答案 operator前两个有效,因为它们调用带有两个参数的非成员函数。以char和charconst*作为参数的函数被定义为非成员(自由)函数。但是,以int为参数的函数被定义为member函数,也就是说第三个函数需要调用一个成员函数。如果您将其作为non-member函数调用,则必须将int转换为存在非成员函数的sometype.因此,当考虑这种

c++ - std 命名空间中的 operator<< 有什么作用?

以下代码当然可以工作(它调用std::cout::operatorcout偶然发现还有std::operatoroperator那么为什么我们需要这个操作符以及如何使用它呢?谢谢。 最佳答案 operator前两个有效,因为它们调用带有两个参数的非成员函数。以char和charconst*作为参数的函数被定义为非成员(自由)函数。但是,以int为参数的函数被定义为member函数,也就是说第三个函数需要调用一个成员函数。如果您将其作为non-member函数调用,则必须将int转换为存在非成员函数的sometype.因此,当考虑这种

c++ - 语言标准中的 "as if"

标准中“好像”一词的确切含义是什么?当用户可以修改行为的各个部分时,它是如何工作的。当谈到operatornew的nothrow版本时,问题在于C++标准。18.4.1.1/7阅读(我的重点):Thisnothrowversionofoperatornewreturnsapointerobtainedasifacquiredfromtheordinaryversion.我的理解是,只要行为合适,“好像”不需要特定的实现。因此,如果operatornew是这样实现的(我知道这不是一个合规的实现,因为没有循环或使用new_handler;但我正在缩短它以专注于我的问题)://NOTE-no

c++ - 语言标准中的 "as if"

标准中“好像”一词的确切含义是什么?当用户可以修改行为的各个部分时,它是如何工作的。当谈到operatornew的nothrow版本时,问题在于C++标准。18.4.1.1/7阅读(我的重点):Thisnothrowversionofoperatornewreturnsapointerobtainedasifacquiredfromtheordinaryversion.我的理解是,只要行为合适,“好像”不需要特定的实现。因此,如果operatornew是这样实现的(我知道这不是一个合规的实现,因为没有循环或使用new_handler;但我正在缩短它以专注于我的问题)://NOTE-no

c++ - 我可以合法地使用重载 operator() 的结构作为 std::upper_bound 的比较吗?

我有这样的结构(类型被简化以延续这一点),生活在std::vector:structRegion{intfirst;intcount;structMetadataregion_metadata;};在vector中,它们按first排序。如果将first和count相加,则得到下一个区域的first;所以基本上这个结构vector描述了连续数字范围的元数据。现在给定一个整数,我想查找元数据。对区域进行排序后,我可以使用std::upper_bound。我是这样实现的:structComp{inlinebooloperator()(constRegion®ion,intindex)