gpt4 book ai didi

c++ - const引用类型的模板类型推导

转载 作者:行者123 更新时间:2023-12-01 15:12:31 27 4
gpt4 key购买 nike

当使用对模板参数类型的 const 引用时,C++ 11 如何进行模板推导让我有点困惑。考虑以下程序:

template <typename T> void test_func(const T &a){
(*a)++;
}

int main() {
// 1st case
int i = 1;
test_func(&i);

// 2nd case
const int* cPtr = &i;
test_func(cPtr);
}

我的问题是:

  • 对于第一种情况,编译正常;所以看起来实例化的模板函数参数是int* const &a (顶级常量);但如果我们直接替换 T with 整数* , we get const int* &a`(低级常量)和编译器应该失败;我们如何以“const T &a”的​​格式表达低级常量?我很困惑参数的真实类型是什么,T的类型是什么;
  • 对于第二种情况,编译失败并显示
    error: increment of read-only location `*(const int*)a;'
    似乎第二个实例化函数也继承了低级常量;那么参数的类型是什么; T 的类型是什么;

最佳答案

您的 test_func() 收到对某物的 const 引用。在第一种情况下,something 是一个整数的地址,所以最终类型是“一个不能用来改变它的引用对象的引用,它是一个指向整数的指针”。这意味着您可以使用指向整数的指针,包括使用它来更改整数,但您不能更改指针的值(即地址)以指向其他内容。

在第二种情况下,最终类型是“不能用于更改其指示对象的引用,它是指向整数的指针,并且该指针不能用于更改整数。”因此,*a 是不能修改的const int

关于c++ - const引用类型的模板类型推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63097213/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com