2

是否可以在 C++ 中为对象重载赋值运算符以接受原始类型?

例如

template< typename T> 
  class Variable
  {
     ...
     Variable<T>& operator=( const Variable<T>& )
     {
       mValue = 0;
       return &this;
     }
  }

  int l = 3;
  Variable<int> intVar();
  intVar = l;

如果我尝试这样做,我会收到以下错误

error: non-object type 'Variable<int> ()' is not assignable

我觉得好像我遗漏了一些明显的东西——我虽然用 C++ 可以做到这一点?

4

1 回答 1

5

您遇到了“令人烦恼的解析”。Variable<int> intVar();声明一个函数,而不是一个对象;()错误消息中类型规范末尾的 表示函数类型。

您想要Variable<int> intVar;声明并默认初始化一个对象。

如果您需要值初始化而不是默认初始化,那么您的选择是:

Variable<int> intVar{};                 // C++11 or later
Variable<int> intVar = Variable<int>(); // Historic dialects
于 2013-05-29T16:01:38.990 回答