首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++算子查找误区

C++算子查找误区
EN

Stack Overflow用户
提问于 2015-12-18 14:11:59
回答 2查看 137关注 0票数 3

下一个案子我有麻烦:

代码语言:javascript
复制
template<typename T>
void test(const T &ref){
     cout << "By reference";
}

template<typename T>
void test(const T *ptr){
     cout << "By pointer";
}

我发送给test()方法的任何参数都将通过引用传递到重载。即使是这样:

代码语言:javascript
复制
int *p = 0; test(p);

有人能告诉我,为什么引用有这么高的优先级和在标准的地方读到这一点。

哦..。我心不在焉!对于指针情况,我必须同时指定const和non重载:

代码语言:javascript
复制
template<typename T>
void test(const T &ref){
     cout << "By reference";
}

template<typename T>
void test(T *ptr){
     cout << "By pointer";
}

template<typename T>
void test(const T *ptr){
     cout << "By const pointer";
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-18 14:32:50

因为const T *意味着Tconst,而不是T *

代码语言:javascript
复制
#include <iostream>
template<typename T>
void test(const T &ref){
     std::cout << "By reference\n";
}

template<typename T>
void test( T * const ptr){
     std::cout << "By pointer\n";
}


int main()
{
    int *p;
    test(p);
    return 0;
}

您还可以使用typedef T * PtrT,然后将T * const更改为const PtrT

代码语言:javascript
复制
template <typename T>
using PtrT = T *;

template<typename T>
void test(const PtrT<T> ptr){
     std::cout << "By pointer\n";
}
票数 3
EN

Stack Overflow用户

发布于 2015-12-18 14:19:44

您能检查模板中使用哪种类型,是int还是int*?我怀疑您检查T为int,但编译器将T解释为int*并使用引用模板。

试着使用

代码语言:javascript
复制
test<int>(p);

指定类型显式

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34357559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档