【问题标题】:Why function parameters can not be static为什么函数参数不能是静态的
【发布时间】:2014-03-20 17:34:59
【问题描述】:

谁能告诉我为什么函数参数不能是static? 这是在Stack 上声明函数参数并在函数返回时被取消分配的原因吗?有没有办法保留参数值?只是困惑。请澄清。

谢谢。

【问题讨论】:

    标签: static function-parameter c++-concepts


    【解决方案1】:

    关键字static 可能被视为有些“过载”。

    以下使用选项都是可行的:

    • 静态局部变量
    • 静态全局变量
    • 静态成员变量
    • 静态全局函数
    • 静态成员函数

    变量:

    就运行时而言,所有类型的静态变量本质上是相同的。它们都驻留在程序的数据部分中,并且它们的地址在整个程序执行过程中保持不变。所以它们之间的唯一区别是在编译期间,在声明的范围内:

    • 静态局部变量:编译器只能在函数范围内识别
    • 静态全局变量:编译器只能在文件范围内识别
    • 静态成员变量:编译器只能在类的范围内识别

    功能:

    就运行时而言,所有类型的函数(静态和非静态)本质上是相同的。它们都驻留在程序的代码段中,并且它们的地址在程序的整个执行过程中保持不变。所以它们之间的唯一区别是在编译期间,在声明的范围内:

    • 静态全局函数:编译器仅在文件范围内识别
    • 静态成员函数:编译器只能在类的范围内识别

    关于您的问题,参数被传递给堆栈中的函数。让它们static 毫无意义,因为这会有效地将它们放在数据部分中。如果它们位于数据部分,那么函数可以简单地从那里读取它们,而不是让它们在堆栈中传递给它。

    【讨论】:

    • 运行以下代码,void print(static int i) {cout
    • 您确定没有收到任何编译器警告吗?我在我的环境中收到warning C4042: 'i' : has bad storage class。也许这是 C++11 中的一个新特性,但肯定不是我所知道的......
    • 是的,我收到的是警告,而不是错误。从概念上讲,我应该说什么是 static 在这里的意义?我可以说放置静态是没有意义的。我可以说 static 关键字在函数参数列表中无关紧要吗?
    • 抱歉,我不明白你说的<code>static</code>是什么意思。
    • 表示在函数参数中添加static关键字,如@9​​87654326@中所做的那样
    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2011-08-13
    • 1970-01-01
    • 2011-10-09
    • 2011-12-08
    相关资源
    最近更新 更多