我正在研究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)
我对返回类型有两种不同的期望:
const (int *) &,即在之后应用const,因此我们无法修改int指针,但可以修改其指向的指针。const int * &,即所有声明符和限定符都一次应用,而不是像1中那样。这里,我们不再可以修改整数所指向的int,而是可以修改指针本身。对我来说,第一个更有意义,因为它背后有一个自然的“替代类”规则,类似于typedef。但是我的问题是;其中哪些(如果有)是正确的,为什么?
当我想到自己时,我正在阅读关于Haskell的教程; Haskell的tail功能具有多大的时间复杂性(以及为什么)?(我在任何文档中都找不到答案)
我猜想对于大小为n的列表,tail函数将是O(n),即只是将尾部复制到新列表并返回该列表.但话说回来,我不太了解Haskell的底层架构(我是语言的新手).
当然,我可以计时.但我还不知道如何在Haskell中计算时间,我也想了解Haskell如何处理问题,证明为什么它是O(n)/ O(1)或其他什么.
提前致谢 :)