F.X — F 章总结与测验
constexpr 函数是允许在常量表达式中调用的函数。要将函数设为 constexpr 函数,我们只需在返回类型前使用 constexpr 关键字。constexpr 函数仅在使用于特定上下文时才保证在编译时进行求值……
constexpr 函数是允许在常量表达式中调用的函数。要将函数设为 constexpr 函数,我们只需在返回类型前使用 constexpr 关键字。constexpr 函数仅在使用于特定上下文时才保证在编译时进行求值……
Constexpr/coneval 函数可以使用非 const 局部变量。在 constexpr 或 coneval 函数中,我们可以使用非 constexpr 的局部变量,并且这些变量的值可以更改。举个简单的例子:#include <iostream> coneval int doSomething(int x, int y) // 函数是 coneval { x = …
强制 constexpr 函数在编译时求值。没有办法告诉编译器 constexpr 函数应该尽可能在编译时求值(例如,在 constexpr 函数的返回值用于非常量表达式的情况下)。但是,我们可以……
非必需常量表达式中的 constexpr 函数调用。您可能会认为 constexpr 函数会尽可能在编译时求值,但不幸的是情况并非如此。在课程中,我们注意到在不需要常量表达式的上下文中,编译器可以选择是否求值……
优化简介。在编程中,优化是修改软件以使其更高效(例如,运行更快或使用更少资源)的过程。优化可以极大地影响应用程序的整体性能水平。某些类型的优化通常是手动完成的。一个……
考虑以下程序,它无法正常工作:main.cpp: #include <iostream> template <typename T> T addOne(T x); // 函数模板前向声明 int main() { std::cout << addOne(1) << ‘\n’; std::cout << addOne(2.3) << ‘\n’; return 0; } add.cpp: template <typename T> T addOne(T x) // 函数模板定义 { …
在课程中,我们介绍了 constexpr 函数,它们是可以在编译时或运行时求值的函数。例如:#include <iostream> constexpr int greater(int x, int y) { return (x > y ? x : y); } int main() { std::cout << greater(5, 6) << ‘\n’; // greater(5, …
以下程序旨在打印您的编译器当前使用的语言标准的名称。您可以复制/粘贴、编译并运行此程序,以验证您的编译器正在使用您期望的语言标准。PrintStandard.cpp: // 此程序打印您的编译器正在使用的 C++ 语言标准是……
在上一课中(),我们展示了这个例子,我们使用一个函数将枚举转换为等效的字符串:#include <iostream> #include <string_view> enum Color { black, red, blue, }; constexpr std::string_view getColorName(Color color) { switch (color) { case black: return “black”; case red: return “red”; case …
在上一课中(),我们展示了这样的一个例子:#include <iostream> enum Color { black, // 0 red, // 1 blue, // 2 }; int main() { Color shirt{ blue }; std::cout << “您的衬衫是 ” << shirt << ‘\n’; return 0; } 这将打印:您的衬衫是……