You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何不能将函数与初始化变量命名为同一名称?

为何不能将函数与初始化变量命名为同一名称?

咱们先看你写的这段出问题的代码:

#include <iostream>
double towerHeight()
{
    std::cout << "Insert the height of the tower";
    double towerHeight{};
    std::cin >> towerHeight;
    return towerHeight;
}

int main()
{
    double towerHeight {towerHeight()}; // 此处报错
}

这个问题其实是C++的名称查找规则在起作用,我给你掰扯明白:

  • 当编译器处理main里的double towerHeight {towerHeight()};时,会先在当前作用域(也就是main函数内部)找名为towerHeight的标识符。
  • 在C++的规则里,变量的名称从它的声明点开始就已经在当前作用域可见了——哪怕是在初始化它的那行代码里。所以此时编译器会把右边的towerHeight当成你正在声明的这个double类型变量,而不是外面那个同名的函数。
  • 但double类型的变量根本不能像函数那样加括号调用,这就违反了语法规则,自然会抛出错误。

你把函数名改成owerHeight或者其他不同的名字后,main里的变量名和外部函数名不冲突,编译器就能正常找到外部的函数来调用,代码也就正常运行了。

简单说就是:同一个作用域里,后出现的同名标识符会“盖住”之前的,而且变量声明的可见性早到初始化阶段,直接抢了函数名的“戏份”,导致编译器认不出你要调用的是函数。

备注:内容来源于stack exchange,提问作者J.R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 12:44:37