C++:非临时const引用

peo*_*oro 11 c++ const reference temporary

我需要编写一个类,其构造函数对对象进行常量引用并将其存储在本地.

为了避免我可以预见的大多数常见错误,我只想接受对非临时错误的引用(即:引用左值).

如何编写一个仅对非临时引用的常量引用的函数?


当然,即使非临时性也可能超出范围,从而打破了我的阶级行为,但我相信通过禁止临时引用,我将避免大多数错误.

Jam*_*lis 18

如果您要存储引用并且需要在构造函数完成后使用它,那么构造函数最好采用指针:

struct C {
    C(const X* p) : p_(p) { }

    const X* p_;
};
Run Code Online (Sandbox Code Playgroud)

这样,它几乎可以保证你不会有一个指向临时的指针(除非X做一些非常愚蠢的事情,比如重载一元文件&以便返回this).

如果构造函数接受指针,那么对于类的用户来说,他们需要注意X它们传递给构造函数的对象的生命周期也更清楚.

  • 清洁智能的解决方案! (4认同)
  • 是的,同意,干净而智能的解决方案!我还将断言“p”不为空,并将其存储为引用。 (2认同)
  • @GManNickG:按照惯例,如果被调用者要求对象的生命周期超出调用的持续时间,我发现最好使用指针(而不是引用)作为参数。如果参数是引用,则在不考虑生命周期管理的情况下调用函数就太容易了。如果参数是指针,则表明您需要研究生命周期约束。 (2认同)