其他分享
首页 > 其他分享> > c – 模板函数通过引用接受临时值和非临时值?

c – 模板函数通过引用接受临时值和非临时值?

作者:互联网

我想拥有

template <class T>
void foo(T &t);

能够接受临时对象,而不会通过引用接受其他对象并在其上调用非const方法.可能在C 03?

我意识到我可能会强制用户将其对象的所有方法声明为const,并将所有成员声明为可变,然后使用const T& t引用,但这是一个丑陋的解决方法.

解决方法:

您可以创建第二个带有const类型引用的函数,并为非const类型引用创建一个副本.

template <class T>
void foo (T &t);

template <class T>
void foo (const T &x) {
    T copy(x);
    foo(copy);
}

可以找到一个示范here.

该技术具有无法区分临时对象和临时对象的限制.这样做的结果是你的原始foo()不允许自己传递一个const对象.这个提议允许他们,因此你失去了最初提供的安全性.您可以通过将foo的const类型版本重命名为foo_for_temp来弥补这一点.然后,调用者将知道该函数的意图.

标签:c,templates,pass-by-reference,c03
来源: https://codeday.me/bug/20190901/1780944.html