c – 编译时知道的值是多少?

前端之家收集整理的这篇文章主要介绍了c – 编译时知道的值是多少?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习C编程语言,在一章中我的书向我介绍了常量的概念:

A constexpr symbolic constant must be given a value that is known at compile time

在编译时知道什么值?我们为什么需要它们?

解决方法

A constant expression表示可以在编译时在编译时(即在程序运行之前,在编译期间)评估的表达式.

常量表达式可用于初始化用constexpr(referring to the C++11 concept)标记的变量.这样的变量为编译器提供了一个提示,即它可以进行编译时评估(并且可以节省宝贵的运行时间),例如:

#include <iostream>

constexpr int factorial(int n) // Everything here is known at compile time
{
    return n <= 1 ? 1 : (n * factorial(n - 1));
}

int main(void)
{
    constexpr int f = factorial(4); // 4 is also known at compile time
    std::cout << f << std::endl;
    return 0;
}

Example

如果不提供常量表达式,编译器无法在编译时实际完成所有这些工作:

#include <iostream>

constexpr int factorial(int n) // Everything here is known at compile time
{
    return n <= 1 ? 1 : (n * factorial(n - 1));
}

int main(void)
{
    int i;
    std::cin >> i;
    const int f = factorial(i); // I really can't guess this at compile time..
                                // thus it can't be marked with constexpr
    std::cout << f << std::endl;
    return 0;
}

Example

编译时额外工作而不是运行时工作的好处是性能提升,因为编译后的程序可能能够使用预先计算的值,而不必每次都从头开始计算它们.常量表达式越贵,程序获得的收益就越大.

猜你在找的C&C++相关文章