小编Joh*_*n K的帖子

如何在constexpr函数中使用临时变量?

这是我想要做的简化版本.

constexpr float f(float a, float b){
    constexpr float temp = a+b;
    return temp*temp*temp;
}
Run Code Online (Sandbox Code Playgroud)

在我的版本中,a + b更复杂,所以我不想剪切和粘贴三次.使用3*(a + b)也不是实际功能的有效解决方案.我试图保持与语法相关的问题,而不是代数.我可以通过将+ b移动到它自己的constexpr函数来实现它,但我宁愿不用其他无用的函数来污染命名空间.

c++ constexpr

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

为什么我的重载模板函数提升为const而非非模板函数.

我有一个正常工作的重载函数.(例子中的f).当我将它转换为同一个东西的模板版本时,它总是通过调用T&版本来打破,而不是T*.(在示例中为t)当我创建模板函数的非const版本时,它按预期工作.(示例中为t2)VS2010和g ++ 4.6.2都会出现这种情况.促销对const规则是否不同,或者这是某种类型的错误.

#include <iostream>
using namespace std;

int f(const int&x){return 1;}
int f(const int*x){return 2;}

template <class T> int t(const T &x){return 3;}
template <class T> int t(const T *x){return 4;}

template <class T> int t2(T &x){return 5;}
template <class T> int t2(T *x){return 6;}

int main(int argc, char ** argv){
    int x=0;
    cout<<f(x)<<endl;
    cout<<f(&x)<<endl;
    cout<<t(x)<<endl;
    cout<<t(&x)<<endl;
    cout<<t2(x)<<endl;
    cout<<t2(&x)<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

1
2
3
3
5
6
Run Code Online (Sandbox Code Playgroud)

c++ templates overloading

4
推荐指数
1
解决办法
125
查看次数

在Scheme中使用append vs cons和reverse更快/传统吗?

在Scheme I中递归地构建列表时,会看到分散在Internet上的两种类型的示例.append每次迭代都附加一个新值的一个.另一个在cons列表完成后每次迭代前置新值的另一个reverse调用一次.

我的直觉是后者更快,但如果Scheme解释器缓存了列表指针的末尾或正在进行其他优化,那么前者将同样快速且可读性更高.如果解释器正在进行此优化,是否保证在所有解释器中都可用?

scheme

4
推荐指数
1
解决办法
451
查看次数

标签 统计

c++ ×2

constexpr ×1

overloading ×1

scheme ×1

templates ×1