鱼C论坛

 找回密码
 立即注册
查看: 1081|回复: 2

静态变量

[复制链接]
发表于 2023-10-29 11:15:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
// example.h
#include <vector>

class Example {
public:
    static double rate;
    static const int vecSize = 20;
    static std::vector<double> vec;
};

// example.cpp
#include "example.h"

double Example::rate = 6.5;
std::vector<double> Example::vec(Example::vecSize);
为什么标红的没有在外部定义?,const能声明静态变量吗?

                               
登录/注册后可看大图

这个图片中为什么可以用constexpr来声明,这里不是说只可以整型吗?
static constexpr double rate = 6.5;???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-29 11:15:17 | 显示全部楼层
标红的静态变量没有在外部定义是因为它们已经在example.cpp文件中进行了定义。在C++中,静态成员变量的定义通常在类的实现文件中进行,而不是在类的声明文件中。

const关键字可以用于声明静态变量。在Example类中,vecSize是一个静态常量,它的值在声明时就被初始化,并且不能在后续的程序中修改。

关于constexpr关键字,它可以用于声明常量表达式。常量表达式是在编译时就可以计算出结果的表达式。在给定的示例中,constexpr可以用于声明rate变量,因为6.5是一个常量表达式。constexpr关键字不仅仅适用于整型,也适用于浮点型、指针等其他类型的常量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-29 11:15:47 | 显示全部楼层
在C++中,静态变量是属于类的,而不是属于任何特定对象的。它们在所有对象中共享。静态变量必须在类定义之外进行定义和初始化。

在你的代码中,ratevec都在example.cpp文件中被定义和初始化了,所以没有问题。vecSize是一个静态常量整数,它可以在类定义中初始化,这是C++的一个特性。所以,vecSize没有在外部定义也是可以的。

至于你的问题,“const能声明静态变量吗?”答案是可以的。在C++中,你可以声明静态常量变量。这些变量的值在编译时就已经确定,且在程序运行期间不能改变。

关于你的最后一个问题,constexpr关键字在C++11中引入,它用于声明常量表达式。这些表达式在编译时就可以知道其值。constexpr不仅可以用于整数,还可以用于浮点数、字符、布尔值等。所以,你可以使用constexpr来声明一个静态的double类型的变量。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 17:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表