草庐IT

assignment-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++ - 为什么在 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++ - 在表达式 left() = right() 中,为什么 right() 先排序?

在C++中,表达式left()=right()求值right()left()按那个顺序。right()先行,正如已讨论过的here.我想不出让right()先走的理由。你能?我想是有原因的。否则,标准几乎不会说出它所说的内容,但请考虑:right()将返回一些结果。在机器代码级别,CPU是否不需要知道将结果right()将返回的位置放在哪里,然后才要求right()返回它?如果您碰巧知道标准委员会的想法(因为您在session室中或已阅读备忘录),那就太好了:我想阅读您的回答。但是,我的实际问题更为温和。我只想知道是否存在一个似是而非的理由以及这个理由可能是什么。

c++ - 在表达式 left() = right() 中,为什么 right() 先排序?

在C++中,表达式left()=right()求值right()left()按那个顺序。right()先行,正如已讨论过的here.我想不出让right()先走的理由。你能?我想是有原因的。否则,标准几乎不会说出它所说的内容,但请考虑:right()将返回一些结果。在机器代码级别,CPU是否不需要知道将结果right()将返回的位置放在哪里,然后才要求right()返回它?如果您碰巧知道标准委员会的想法(因为您在session室中或已阅读备忘录),那就太好了:我想阅读您的回答。但是,我的实际问题更为温和。我只想知道是否存在一个似是而非的理由以及这个理由可能是什么。

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++ - 我可以合法地使用重载 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)

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)

c++ - 赋值运算符 - 自赋值

编译器生成的赋值运算符是否防止自赋值?classT{intx;public:T(intX=0):x(X){}};intmain(){Ta(1);a=a;}即使类成员不是指针类型,我是否总是需要防止自赋值? 最佳答案 Doesthecompilergeneratedassignmentoperatorguardagainstselfassignment?不,它没有。它仅执行成员方式的复制,其中每个成员都由其自己的赋值运算符(也可能是程序员声明的或编译器生成的)进行复制。DoIalwaysneedtoprotectagainstself

c++ - 赋值运算符 - 自赋值

编译器生成的赋值运算符是否防止自赋值?classT{intx;public:T(intX=0):x(X){}};intmain(){Ta(1);a=a;}即使类成员不是指针类型,我是否总是需要防止自赋值? 最佳答案 Doesthecompilergeneratedassignmentoperatorguardagainstselfassignment?不,它没有。它仅执行成员方式的复制,其中每个成员都由其自己的赋值运算符(也可能是程序员声明的或编译器生成的)进行复制。DoIalwaysneedtoprotectagainstself