c++ - 不允许在 C++ 中将对 const 的指针/引用指向临时对象(无 C++0X)

标签 c++ boost metaprogramming

我面临以下问题。考虑以下类:

//Will be similar to bost::reference_wrapper
template<class T>
class Ref {
public:
  explicit Ref(T& t) : m_ptr(&t) {}
private:
  T* m_ptr;
};

这个函数返回一个 double

double fun() {return 1.0;}

如果我们现在有

double x = 1.0;
const double xc = 1.0;

Ref<double> ref1(x); //OK
Ref<const double> refc1(cx); //OK

然而,到目前为止还不错:

//Ref<double> ref2( fun() ); //Fails as I want it to
Ref<const double> refc2( fun() ); //Works but I would like it not to

有没有办法修改 Ref(您喜欢的方式)而不是 fun 函数,以便最后一行返回编译时错误? 请注意,您可以修改构造函数签名(只要我能够按预期初始化 Ref)。

最佳答案

不,即使使用普通引用,您的代码也可能被破坏。简单地记录事实,即传递的对象必须是持久的。

double *x = new double;
Ref<double> ref(*x);
delete x;    

关于c++ - 不允许在 C++ 中将对 const 的指针/引用指向临时对象(无 C++0X),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4133692/

相关文章:

c++ - 使用 boost iostream socket 读写文件

c++ - 如何在 boost::unique_lock<boost::mutex> 上尝试锁定

c++ - 如何计算 C++ 中正态分布的 CDF 概率?

macros - 如何创建抑制错误和警告的宏?

c++ - 与 Mathematica 相比,C++ 中的 float 学舍入很奇怪

c++ - 在持续评估期间读取其生命周期之外的变量是否可诊断?

c++ - 在编译时为 C++ 中的成员函数添加别名

ruby - method_missing

c++ - 如何在没有额外拷贝的情况下从 std::map 安全地获取 "pop-front"?

c++ - 两个排序数组的交集