gpt4 book ai didi

c++ - 如何将 const 应用于 C++ 中参数列表之外的模板参数类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:53 24 4
gpt4 key购买 nike

我正在研究 C++ 模板,但我一直在思考 const 和作为模板函数参数的类型之间的交互。具体来说,我正在考虑在模板参数列表之外应用时常量如何与模板类型交互。

我曾尝试在 C++ Primer 5th ed (Lippman) 和 C++11 标准草案中寻找这种交互,但是 const 在这种情况下要么没有明确提及,要么(在标准的情况下)相当复杂它的描述(我对 C++ 还是有些陌生)。

这是我的问题的代码示例:

template<typename T>
const T & constify(T & t) {
return t;
}

...

int* i = 0x12345678;
constify(i);

我对返回类型有两种不同的期望:

  1. 推导出的返回类型是const (int *) &,即const是在后面应用的,所以我们不能修改int指针,但可以修改它指向的内容。
  2. 推导的返回类型是const int * &,即所有的声明符和限定符都是一次应用的,而不是像1中那样。这里,我们不能再修改整数指向的int , 但我们可以修改指针本身。

对我来说,第一个更有意义,因为它背后有一个自然的“类替换”规则,类似于 typedef。但我的问题是;以下哪些(如果有)是正确的,为什么?

最佳答案

模板类型替换不是文本类型,因此不要根据文本类型定义来考虑它们。

在您的示例中,T 被推断为 int * - 我们称它为 intptr。您正在对它进行 const 引用,因此返回值变为 const intptr&。也就是说,不能通过这个引用修改指针本身,但是可以修改它指向的值。

最后但并非最不重要的一点是,您可以在提问之前轻松验证您的假设 :)

关于c++ - 如何将 const 应用于 C++ 中参数列表之外的模板参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654939/

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