C ++为什么重载(T&)与模板(T *)

问题描述 投票:0回答:2

在C ++中,如果一个方法是接受左参考+指针只,

现在看来,这足够了,如果我们只有一个模板方法与T&作为参数,所以我们通常test(T* )超载呢?

概念证明:左参考方法可以采取指针参数。

#include <iostream>
using namespace std;

template<class T>
void test(T& arg) {
  T value = arg;
  cout << *value << endl;
}

int main() {
    int b = 4;
    int* a = &b;
    test(a); // compiles and runs without issue.
    return 0;
}
c++11 templates
2个回答
0
投票

为什么[不]我们通常test(T* )超载呢?

我不知道,我们通常做这种事情,但如果一个人对超载的指针,那将是因为指针表现得比对象类型不同。请记住,其实是一个指针是不是对象,但一个地址的对象。

test(a)编译并没有问题运行的原因是因为它被接受的一个对象作为它的参数的指针的引用。因此,线cout << *value << endl;执行时,指针被解除引用回的对象和我们看到4印刷到标准输出。


0
投票

作为@HolyBlackCat提到的,我们通常要为T&T*做不同的事情。

如例子中所指出的,对于test(T&)我们通常需要手动解引用,这将导致该行为的差异,所以是有意义的有这样的过载。

© www.soinside.com 2019 - 2024. All rights reserved.