use*_*329 3 c++ pointers const reference
考虑这个课程
class Foo
{
public:
Foo()
: r_obj(&nullobj)
{}
void setDataRef(const T& obj)
{
r_obj = &obj;
}
private:
static T nullobj;
const T* r_obj;
};
Run Code Online (Sandbox Code Playgroud)
这迫使r_obj指向某事,我知道该类无法修改它指向的任何逻辑状态.但是,现在传递一个setDataRef非常糟糕的临时对象是完全合法的.
如果改为使用setDataRef(T&),则常量丢失.
传递指针不会强制对象真正指向某个东西.
是否可以获得所有三个:
在旧的C++中我认为这是不可能的,但是使用C++ 11我们可以做到:
class Foo
{
public:
Foo()
: r_obj(&nullobj)
{}
void setDataRef(const T& obj)
{
r_obj = &obj;
}
void setDataRef(T&& obj) = delete; // Crucial extra line
private:
static T nullobj;
const T* r_obj;
};
Run Code Online (Sandbox Code Playgroud)
如果有人试图传递临时值setDataRef,则重载解析将更喜欢该T&&版本,但因为它被删除,所以调用格式不正确.如果有人传递左值,那将绑定到const引用.
| 归档时间: |
|
| 查看次数: |
561 次 |
| 最近记录: |