小编jok*_*007的帖子

如何在成员函数内完美转发`*this`对象

是否可以*this在成员函数内完美转发对象?如果是的话,我们该怎么做呢?如果不是,那么为什么不呢?我们有哪些替代方案可以达到同样的效果。

请参阅下面的代码片段以更好地理解该问题。

class Experiment {
public:
  double i, j;
  Experiment(double p_i = 0, double p_j = 0) : i(p_i), j(p_j) {}

  double sum() { return i + j + someConstant(); }

  double someConstant() && { return 10; }

  double someConstant() & { return 100; }
};

int main() {
  Experiment E(3, 5);
  std::cout << std::move(E).sum() << "\n";  // prints: 108
  std::cout << E.sum() << "\n";             // prints: 108
}
Run Code Online (Sandbox Code Playgroud)

如果我们认为*this成员函数内的对象double sum()始终是左值或x值(因此是左值),则此输出似乎是预期的。请确认这是否属实。

如何才能完美地将*this对象转发给成员函数 …

c++ overload-resolution c++11 explicit-object-parameter

14
推荐指数
1
解决办法
910
查看次数

将文字分配给指针

我知道这个网站上有数以百万计的类似问题,但没有人指出我难以理解的话题.

我想为这样的整数指针分配一个整数文字:

int *p=(int []){7} //casting the literal to array so that it would return the address of first element just like string literal.
Run Code Online (Sandbox Code Playgroud)

但它给出了错误:

括号类型后跟初始化列表是非标准显式类型转换语法.

这段代码在C中完美运行.

如果这种类型的转换在C++中是非法的,还有其他方法可以实现同样的目的吗?

c++ casting

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