小编Tal*_*don的帖子

运算符[]的奇怪行为

花了最后几天尝试使用C++ operator []方法,我遇到了一个我无法解释的异常现象.下面的代码实现了一个简单的测试字符串类,它允许用户通过其下标"operator"方法访问单个字符.由于我想区分左值和右值下标上下文,"operator"方法返回自定义"CReference"类的实例,而不是标准的C++字符引用.虽然"CReference""operator char()"和"operator =(char)"方法似乎分别处理每个rvalue和lvalue上下文,但g ++拒绝编译而没有记录的附加"operator =(CReference&)"方法下面.虽然添加此方法似乎安抚了某种编译时依赖性,但在程序执行期间从未在运行时实际调用它.

作为一个认为自己已经对C++复杂性有了基本了解的人,这个项目无疑已经证明是一种令人羞愧的体验.如果有人能够看到他们的方式来启发我在这里发生了什么,我会永远感激.与此同时,我将不得不拔出C++书籍,以便在我所知道的和我认为知道的东西之间调和.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

// Class for holding a reference to type char, retuned by the "operator[](int)"
// method of class "TestString". Independent methods permit differentiation
// between lvalue and rvalue contexts.
class CReference
{
 private:
   char& m_characterReference;

 public:
   // Construct CReference from char&
   CReference(char& m_initialiser)
     : m_characterReference(m_initialiser) {}

   // Invoked when object is referenced in a rvalue char context.
   operator char()
   {
    return m_characterReference;
   }

   // Invoked when object …
Run Code Online (Sandbox Code Playgroud)

c++

7
推荐指数
1
解决办法
353
查看次数

运算符+序列中的临时生命周期

可能重复:
C++中临时的保证寿命?
临时的一生

当从重载operator+方法返回时,我有一个关于临时对象的生命周期的快速问题.例如,如果表达式......

a = b + c + d + e
Run Code Online (Sandbox Code Playgroud)

...是通过重载operator+方法返回临时对象来评估的,是b + c整个表达式的子表达式返回的临时范围?

由于g ++似乎保留在所有临时值上,而整个表达式都在范围内,因此可以在a =赋值期间对这些值进行延迟评估.

有人可以确认是否所有C++实现都能保证这种行为?

c++

5
推荐指数
1
解决办法
211
查看次数

标签 统计

c++ ×2