每日一题
路径总和. - 力扣(LeetCode)

class Solution {
public:
bool flag = 0;
void dfs(TreeNode* root,int ans,int targetSum){
if(root==nullptr) return;
if(root->left==nullptr&&root->right==nullptr&&ans+root->val==targetSum)flag=1;//确定走到叶子节点,并且该叶子节点的ans=目标值
dfs(root->left,ans+root->val,targetSum);//遍历二叉树
dfs(root->right,ans+root->val,targetSum);
return;
}
bool hasPathSum(TreeNode* root, int targetSum) {
if(root == nullptr) return false;//树为空直接返回false
dfs(root,0,targetSum);
return flag;
}
};
八股
什么是 C++ 中的常量表达式? 有什么用途?
在 C++ 中,常量表达式(constexpr)是指在编译时就能被计算出来的表达式。它的关键特性是:编译器能够在程序编译阶段就确定表达式的值,而不是等到程序运行时才计算。常量表达式常常用于提高程序效率和简化代码的编写。
常量表达式的用途:
- 编译时计算:常量表达式的最主要用途是让某些计算在编译时就完成,减少运行时的计算负担。这样可以提高程序的执行效率,尤其是对于复杂计算或大规模数据处理的场景。
- 常量数组的大小:你可以使用 constexpr 定义数组的大小、模板参数等,这样可以确保编译时计算确定值,从而避免运行时的额外开销。
- 模板编程:在模板元编程中,constexpr 被广泛用于计算常量值,从而在编译时完成各种类型和计算的推导。例如,使用 constexpr 可以实现一些编译期的算法和常量初始化。
- 更强的类型检查:constexpr 确保某些值在编译时就确定,这帮助编译器在编译过程中进行更多的检查,并提前发现潜在的错误。
如何判断一个表达式是否是常量表达式?
要判断一个表达式是否是常量表达式,通常依赖于表达式的上下文和它是否符合编译时计算的条件。
使用 constexpr 关键字
最直接的方式是使用 constexpr 关键字来声明一个变量或函数。如果表达式满足常量表达式的要求,编译器会在编译时计算出其值。
编译时检测表达式是否为常量表达式
C++11 引入了 std::is_constant_evaluated 来检测一个表达式是否是在常量求值上下文中被求值。可以用来判断当前代码是否在常量表达式的上下文中执行。
685

被折叠的 条评论
为什么被折叠?



