小编Sim*_*rak的帖子

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

我正在研究C ++模板,并且一直在思考const和作为模板函数参数的类型之间的相互作用。具体来说,我在考虑在模板参数列表之外应用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);
Run Code Online (Sandbox Code Playgroud)

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

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

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

c++ templates const

5
推荐指数
2
解决办法
99
查看次数

哈斯克尔的"尾巴"函数有什么时间复杂性?

当我想到自己时,我正在阅读关于Haskell的教程; Haskell的tail功能具有多大的时间复杂性(以及为什么)?(我在任何文档中都找不到答案)

我猜想对于大小为n的列表,tail函数将是O(n),即只是将尾部复制到新列表并返回该列表.但话说回来,我不太了解Haskell的底层架构(我是语言的新手).

当然,我可以计时.但我还不知道如何在Haskell中计算时间,我也想了解Haskell如何处理问题,证明为什么它是O(n)/ O(1)或其他什么.

提前致谢 :)

haskell

3
推荐指数
2
解决办法
682
查看次数

标签 统计

c++ ×1

const ×1

haskell ×1

templates ×1