C++ 奇怪的bug C++;11模板类

C++ 奇怪的bug C++;11模板类,c++,c++11,C++,C++11,一切都很好。但是输出包含一个奇怪的错误,我不理解。如果有人能帮我,那就太好了 main(): 模板类:(不是我自己的,取自github上的“svg曲线库”,稍作修改;在原始上下文中,一切都很好) 模板 结构点泛型 { 公众: 结构x_getter; 结构y_getter; x_getter x{this}; y_getter y{this}; PointGeneric():PointGeneric{0,0}{} 点泛型(txx,tyy):x(this),y(this),x{x},y{y}{

一切都很好。但是输出包含一个奇怪的错误,我不理解。如果有人能帮我,那就太好了

main():

模板类:(不是我自己的,取自github上的“svg曲线库”,稍作修改;在原始上下文中,一切都很好)

模板
结构点泛型
{   
公众:
结构x_getter;
结构y_getter;
x_getter x{this};
y_getter y{this};
PointGeneric():PointGeneric{0,0}{}
点泛型(txx,tyy):x(this),y(this),x{x},y{y}{};
...
私人:
Tx_x;
蒂伊;
};
x_getter-结构:

template <typename Tx = float, typename Ty = Tx>
struct PointGeneric<Tx, Ty>::x_getter
{
   public:
      x_getter(PointGeneric *t): thisPointer{t} {};
      operator Tx() const {return this->thisPointer->_x;};
  private:
     PointGeneric<Tx, Ty>* thisPointer;
};
模板
结构PointGeneric::x_getter
{
公众:
x_getter(PointGeneric*t):thisPointer{t}{};
运算符Tx()常量{返回this->thisPointer->\ux;};
私人:
PointGeneric*这个指针;
};

至少在显示的代码中,
PointGeneric
没有用户定义的复制构造函数或赋值运算符,
x\u getter
也没有。隐式定义的版本将使

PointGeneric<float> source;
PointGeneric<float> dest = source;

这里,
source
是一个临时的,在分号处销毁,留下
v[i].x.thispoint
一个悬空指针。我推测(尽管没有显示)表达式
可能会导致什么错误?你期望不同的产出吗?哪种输出以及为什么?你能在一些在线编译器网站上做一个测试吗?你的输出显示了三次
2:v[2]
。用给定的代码,我无法再现这一点。你忠实地再现了第二个循环吗?扔掉这段代码
x_getter
etc完全是无用的语法糖。错误在于,当我第二次在同一个向量上使用cout时,我得到了不同的输出(是向量最后一个元素的三倍)。这与x_getter结构有关。当我删除后者并删除x(这个)和y(这个)时,bug也被删除了。但问题是需要x_getter结构来保持库的原始代码运行。因此,我不能仅仅删除此代码。我想知道:为什么原始作者使用这种代码,为什么它会导致观察到的错误。正如WorldSEnder已经提到的,输出不能是给定代码的输出!
template <typename Tx = float, typename Ty = Tx>
struct PointGeneric 
{   
    public:     
      struct x_getter;
      struct y_getter;

      x_getter x{this};
      y_getter y{this};

      PointGeneric() : PointGeneric { 0, 0} {}
      PointGeneric(Tx x, Ty y) : x(this), y(this), _x{x}, _y{y} {};

 ...

   private:
     Tx _x;
     Ty _y;
};
template <typename Tx = float, typename Ty = Tx>
struct PointGeneric<Tx, Ty>::x_getter
{
   public:
      x_getter(PointGeneric *t): thisPointer{t} {};
      operator Tx() const {return this->thisPointer->_x;};
  private:
     PointGeneric<Tx, Ty>* thisPointer;
};
PointGeneric<float> source;
PointGeneric<float> dest = source;
v[i] = {(float)(i*1.1), (float)(i*0.9)};