i你哟 发表于 2023-10-29 11:15:13

静态变量

// 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能声明静态变量吗?
https://img-blog.csdnimg.cn/20210221144508690.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5OTM4NjY2,size_16,color_FFFFFF,t_70
这个图片中为什么可以用constexpr来声明,这里不是说只可以整型吗?
static constexpr double rate = 6.5;???

isdkz 发表于 2023-10-29 11:15:17

标红的静态变量没有在外部定义是因为它们已经在example.cpp文件中进行了定义。在C++中,静态成员变量的定义通常在类的实现文件中进行,而不是在类的声明文件中。

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

关于constexpr关键字,它可以用于声明常量表达式。常量表达式是在编译时就可以计算出结果的表达式。在给定的示例中,constexpr可以用于声明rate变量,因为6.5是一个常量表达式。constexpr关键字不仅仅适用于整型,也适用于浮点型、指针等其他类型的常量。

陶远航 发表于 2023-10-29 11:15:47

在C++中,静态变量是属于类的,而不是属于任何特定对象的。它们在所有对象中共享。静态变量必须在类定义之外进行定义和初始化。

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

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

关于你的最后一个问题,constexpr关键字在C++11中引入,它用于声明常量表达式。这些表达式在编译时就可以知道其值。constexpr不仅可以用于整数,还可以用于浮点数、字符、布尔值等。所以,你可以使用constexpr来声明一个静态的double类型的变量。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 静态变量