C++ 如何提供默认参数作为此对象?

C++ 如何提供默认参数作为此对象?,c++,default-value,C++,Default Value,我希望有这样的声明: void Date::get_days_name(const Date& = this) 我可以理解,如果没有提供参数,请使用此对象作为参数。由于VS中的某些原因,我收到错误消息: '错误1错误C2355:'此':只能在非静态成员内引用' 知道我做错了什么吗?您可以使重载函数: void get_days_name(const Date&) const; void get_days_name() const { get_days_name(*this)

我希望有这样的声明:

void Date::get_days_name(const Date& = this)
我可以理解,如果没有提供参数,请使用此对象作为参数。由于VS中的某些原因,我收到错误消息:

'错误1错误C2355:'此':只能在非静态成员内引用'


知道我做错了什么吗?

您可以使重载函数:

void get_days_name(const Date&) const;
void get_days_name() const {
  get_days_name(*this);
}
void Date::get_days_name(const Date* value_ = NULL) const
{
  const Data* value =
    value_ != NULL ?
    value_ :
    this;
  // the rest of the code operates on value.
}

(顺便说一句,
这是一个指针,不是参考。)

您可以使重载函数:

void get_days_name(const Date&) const;
void get_days_name() const {
  get_days_name(*this);
}
void Date::get_days_name(const Date* value_ = NULL) const
{
  const Data* value =
    value_ != NULL ?
    value_ :
    this;
  // the rest of the code operates on value.
}
(顺便说一句,
这是一个指针,不是一个引用。)

我喜欢Kenny的,但是如果您愿意将参数从引用更改为指针,您可以使用一个函数:

void get_days_name(const Date&) const;
void get_days_name() const {
  get_days_name(*this);
}
void Date::get_days_name(const Date* value_ = NULL) const
{
  const Data* value =
    value_ != NULL ?
    value_ :
    this;
  // the rest of the code operates on value.
}
使用指针更清楚地表明,
value\uu
也是一个可选参数

但是,如果get_days_name可以在任何
日期自由操作,它可能应该是
静态的

我喜欢Kenny的,但是如果您愿意将参数从引用更改为指针,您可以使用一个函数:

void get_days_name(const Date&) const;
void get_days_name() const {
  get_days_name(*this);
}
void Date::get_days_name(const Date* value_ = NULL) const
{
  const Data* value =
    value_ != NULL ?
    value_ :
    this;
  // the rest of the code operates on value.
}
使用指针更清楚地表明,
value\uu
也是一个可选参数


<>但是,GETXYAYSYNEX如果可以在任何<代码>日期>代码>上自由运行,则应该是<代码>静态< /代码>。< /P>您正在编写非法C++代码——在这种上下文中不能使用<代码> < <代码> >。您应该将参数列表视为类的“外部”。代码中没有足够的上下文。get_days_name()是成员函数吗?你想用保留字
this
作为参数名吗?@Neil我怎样才能获得类似的效果?提供一个重载函数,它不带任何参数,可以对
this
执行任何你想要的操作。你可能根本不应该尝试这样做。当你可以做
b.get_days_name()
时,你为什么要做
a.get_days_name(b)
?如果两个表单执行不同,它们应该是唯一的函数,以便使它们的意图更加清晰。您正在编写非法的C++代码——在这种上下文中不能使用<代码> < <代码>。您应该将参数列表视为类的“外部”。代码中没有足够的上下文。get_days_name()是成员函数吗?你想用保留字
this
作为参数名吗?@Neil我怎样才能获得类似的效果?提供一个重载函数,它不带任何参数,可以对
this
执行任何你想要的操作。你可能根本不应该尝试这样做。当你可以做
b.get_days_name()
时,你为什么要做
a.get_days_name(b)
?如果这两种形式的功能不同,它们应该是独特的功能,以便使它们的意图更加明确。