花了最后几天尝试使用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++中临时的保证寿命?
临时的一生
当从重载operator+方法返回时,我有一个关于临时对象的生命周期的快速问题.例如,如果表达式......
a = b + c + d + e
Run Code Online (Sandbox Code Playgroud)
...是通过重载operator+方法返回临时对象来评估的,是b + c整个表达式的子表达式返回的临时范围?
由于g ++似乎保留在所有临时值上,而整个表达式都在范围内,因此可以在a =赋值期间对这些值进行延迟评估.
有人可以确认是否所有C++实现都能保证这种行为?
c++ ×2