精华内容
下载资源
问答
  • C++中常量定义
    千次阅读
    2019-10-20 21:13:08

    在 C++ 中,有两种简单的定义常量的方式:
     1 使用 #define 预处理器。
     2  使用 const 关键字。

    #define 和 const 的区别:

    角度1: 就定义常量说的话, const 定义的常数是变量 也带类型, #define 定义的只是个常数 不带类型。

    角度2: 就起作用的阶段而言,#define 是在编译的预处理阶段起作用,而 const 是在 编译、运行的时候起作用。

    角度3: 就起作用的方式而言,#define 只是简单的字符串替换,没有类型检查。而 const 有对应的数据类型,是要进行判断的,可以避免一些低级的错误。 正因为 define 只是简单的字符串替换会导致边界效应,具体举例可以参考下面代码:

    #define N 2+3 // 我们预想的 N 值是 5,我们这样使用
    double a = N/2; // 我们预想的 a 的值是 2.5,可实际上 a 的值是 3.5

    角度4: 就空间占用而言, 例如:

    #define PI 3.14 //预处理后 占用代码段空间
    const float PI=3.14; // 本质上还是一个 float,占用数据段空间

    角度5: 从代码调试的方便程度而言, const 常量可以进行调试的,#define 是不能进行调试的,因为在预编译阶段就已经替换掉了

    角度6: 从是否可以再定义的角度而言, const 不足的地方,是与生俱来的,const 不能重定义,而 #define 可以通过 #undef 取消某个符号的定义,再重新定义。

    补充:在一个类里建立一个 const 时,不能给他初值;

    foo{
    public:
        foo():i(100){}
    private:
        const int i=100; // 错误!!!
    };
    //或通过如下方式进行初始化
    foo::foo():i(100){}
    

    const 修饰的成员函数中不能修改成员变量,不能调用非 const 修饰的函数

    void showData()const{}
    
    更多相关内容
  • 在C++中,要定义一个常量,有两种主要的做法  1. 符号常量 (#define)  2. 常值变量 (const)  符号常量定义方式,其实与C++本身没有关系,它是一个编译器指令,或者称为预处理指令(有关的预处理指令还有#...
  • 在C++中,要定义一个常量,有两种主要的做法  1. 符号常量 (#define)  2. 常值变量 (const)  符号常量定义方式,其实与C++本身没有关系,它是一个编译器指令,或者称为预处理指令(有关的预处理指令还有#...
  • C++中常量定义小结

    2021-01-01 04:45:36
    一般来说,使用C语言编程时我们都习惯代码当中使用C当中的宏定义定义一个数值常量: #define MY_CONST 7 在C++开发项目时,也会经常存在沿袭C当中常量用法情况。所以,如下的一种写法看起来反倒觉得有些不正宗...
  • C++中定义常量的几种方式

    千次阅读 2022-04-01 14:46:14
    C++中定义常量的几种方式

    概述

    在程序运行过程中,始终不发生改变的量,称之为常量。在 C++ 语言中常量是个固定值,也就是说常量值在定义后不能进行修改。

    #define

    ①.宏常量
    #define 是 C 语言中定义常量的方式,在 C++ 中也可以使用。
    ②.#define 的使用

    #define MAX = 200
    

    ③.宏常量的特点
    define 在预处理阶段起作用;宏常量没有数据类型,只是进行文本替换替换;宏常量在内存中会产生多份相同的备份。
    若仅用于定义常量,在 C++ 中不推荐使用。

    const

    ①.const 限定符
    const 是 C++ 中的变量修饰符,表示该变量是只读的,不可改变的,const 是变量类型的一部分。
    ②.const 的使用

    const int max = 20;
    

    ③.const 变量的特点
    const 在编译、运行阶段起作用;const 常量有数据类型,编译器可以进行类型安全检查;const 常量在程序运行过程中只有一份备份。

    enum

    ①.enum 枚举类
    enum 是 C++ 中一种派生数据类型,它是由用户定义的若干枚举常量的集合。
    ②.enum 的使用

    enum class color{ red,green,blue };
    

    ③.enum 类型的特点
    enum 在编译时被全部求值;enum 常量隐含数据类型是整数,其最大值有限,且不能表示浮点类型 ;枚举常量不会占用对象的存储空间。

    constexpr

    ①.constexpr 常量表达式
    C++ 中使用 constexpr 表示常量表达式,是指值不会改变并且在编译过程就能得到计算结果的表达式,constexpr 是声明的一部分,而不是变量类型的一部分。
    ②.constexpr 的使用

    constexpr int max = 35;
    

    ③.constexpr 的特点
    constexpr 的变量的值必须是编译器在编译的时候就可以确定的。
    在这里插入图片描述

    展开全文
  • 主要介绍了详解C++中常量的类型与定义,使用#define与const来定义常量C++入门学习的基础知识,需要的朋友可以参考下
  • 对于C++23标准,如果我们想要某个的成员变量能被此类的所有对象访问,且该变量不可修改,那么我们一般会选择将该变量声明为静态成员常量。例如此代码: class Decrypter{ static const int mask = 0x8a; public...

    对于C++23标准,如果我们想要某个类的成员变量能被此类的所有对象访问,且该变量不可修改,那么我们一般会选择将该变量声明为静态常量。例如此代码:

    class Decrypter{
        static const int mask = 0x8a;
    public:
        void decrypt(){
            ...
        }
    };

    其中,我们把Decrypter::mask声明为了一个静态常量。对于Decrypter类的所有对象而言,都能访问到同一个mask,节约了内存空间。

    然而,如果我们把mask改为一个mask数组,如下列代码所示:

    class Decrypter{
        static const int mask[] = {0x8a, 0x2b, 0x3c};
    public:
        void decrypt(){
            ...
        }
    };

    此时编译器就会报错:

     error: in-class initialization of static data member 'const int Decrypter::mask []' of incomplete type

    翻译过来就是:“错误:不完整类型的静态成员'const int Decrypter::mask []'的类内初始化”。

    这句话连谓语都没有,简直晦涩难懂。

    猜测其大致意思为:mask数组在初始化时遇到了错误,原因是其类型不完整。

    解决办法有两种:

    第一种方法是将定义搬到类外面去:

    class Decrypter{
        static const int mask[];
    public:
       void decrypt(){
            ...
       }
    };
    const int Decrypter::mask[] = {0x8a, 0x2b, 0x3c};

    个人并不是很喜欢这种做法,因为破坏了直观性。万一这个静态常量下面的代码非常多,为了看他这一个静态常量的定义内容,我们还得用鼠标滚下去,再滚上来,很破坏阅读程序时的思维连贯性。也可能是博主最近学习了Python,不太喜欢这种形式。

    所以为了依然在类内定义此静态常量,一般会采用第二种方法。

    第二种方法是在前面加一个“constexpr”:

    class Decrypter{
        constexpr static const int mask[] = {0x8a, 0x2b, 0x3c};
    public:
       void decrypt(){
            ...
        }
    };

    这样编译器就不会报错了,程序完美运行,同时也达到了在类内直接定义此静态常量的目的。 

    第一次看到这个关键字就很萌,这尼玛什么神仙关键字啊

    然后一查资料:“常量表达式(constexpr)在编译期就可以计算出结果。”

    然而这里的constexpr显然不是在编译期计算出来的,比如我写这串代码,也能正常运行:

    #include <iostream>
    using namespace std;
    
    class Decripter{
        constexpr static const int mask[] = {10, 20, 30};
        int x;
    public:
        Decripter(): x(0){}
        int next(){
            return mask[x++];
        }
    };
    
    int main() {
        Decripter dd;
        cout << dd.next() << endl;    //10
        cout << dd.next() << endl;    //20
        cout << dd.next() << endl;    //30
        return 0;
    }

    由于x是一直在变化的,所以显然不可能在编译期间得出

    我反正是很懵的。。。

    展开全文
  • C++ 定义常量的两种方式

    千次阅读 2021-09-09 01:06:11
    C++定义常量的方式有两种: 1、#define 宏常量 通常文件上方定义 2、const 修饰的变量 通常变量定义前加关键字 const #include <iostream> using namespace std; //1、宏常量 #define Day 7 ...

    常量的作用:

            用于记录程序中不可更改的数据

    C++定义常量的方式有两种:

            1、#define 宏常量

                    通常在文件上方定义

            2、const 修饰的变量

                    通常在变量定义前加关键字 const

    #include <iostream>
    using namespace std;
    
    //1、宏常量
    #define Day 7
    
    int main()
    {
            //Day = 8; //错误,Day是常量,一旦修改就会报错
            cout << "day =" << Day << endl;
    
            //2、const修饰的变量
            const int month = 12;
            //month = 24;    //错误,const修饰的变量也称为常量
            cout << "month=" << month << endl;
    
            return 0;
    }

     

    展开全文
  • 1、 里面怎么定义const常量 C++ ...假如定义一个非整型的常量该如何?enum无法完成此项操作,同时丧失了枚举本来的作用。 方法三:(正确,最好) 使用静态常量; class Test {  static ..
  • C++中常量定义的两种方法

    千次阅读 2020-08-18 23:41:00
    尽量使用const定义,#define编译出错的时候很难排错,是宏替换的方式,只是把标识符用定义好的常量信息或数值替换过去;而const容易排错,出错时可以通过编译工具审查,可以作为语法错误检测出来。 ...
  • c++类中如何定义常量

    千次阅读 2013-09-17 16:56:11
    如何在c++中定义常量:  不能在类中初始化const数据成员,因为在类没有被初始化的时候,成员是不存在的。const成员只在某个对象的生存周期存在的,不同的对象const成员变量的值不一样。 class Const { ...
  • C++类中常量

    2019-01-03 10:12:00
    C++类中的常量  常量是种标识符,它的值运行期间恒定不变。C语言用 #define来定义常量(称为宏常量)。C++ 语言除了 #define外还可以用const来定义常量(称为const常量)。 1 为什么需要常量 如果不使用常量...
  • C++类中常量定义

    千次阅读 2017-03-04 12:56:05
    有时我们希望某些常量在类中有效。由于#define定义的宏常量是全局的,不能达到目的,于是想当然地觉得应该用const修饰数据成员来实现。const数据成员的确是存在的,但其含义却不是我们所期望的。const数据成员只在...
  • c++ 中定义常量的两种方法

    万次阅读 2018-08-03 11:07:33
    c++中定义常量有两种方法: 1.使用#define预处理器 #define SCREEN_HEIGHT 640 2.使用const关键字 const int SCREEN_WIDTH 960; 所谓常量,即程序执行期间不会改变的变量,常量可以是任意类型的变量,只不过...
  • 此篇文章介绍内静态常量定义和声明的用法,编程时经常遇到需要定义一个常量,而且如果要确保其的有效性某个范围内,则需要将其定义在一个class内。而其用法常会遇到一些问题,下面简要说明其中会遇到的一个...
  • C++ 常量定义 static const

    千次阅读 2020-04-05 18:06:48
    在C++类定义常量常用方式static const ,enum, 或const等形式。 static const : 头文件CTest内声明如下: static const int SIZE = 10; // 内声明,同时初始化,仅适用于整型变量,ints/chars/bools...
  • C++类中定义常量

    2013-05-08 09:39:55
    C++中定义常量  2009-02-13 17:26:43| 分类: C/VC/C++ |字号 订阅 在C++中定义常量,有以下两种方法: 1.在类定义体内定义枚举常量;  例如:  class A  {  public:  enum  {  ...
  • C++ 定义常量pi

    千次阅读 2021-03-27 08:49:17
    const double pi = acos(-1);
  • C++ 如何正确高效地定义字符串常量

    千次阅读 2020-04-10 16:23:35
    阅读gtest.cc 代码发现 字符串常量定义成数组的形式,为什么不定义成指针呢? // A test filter that matches everything. static const char kUniversalFilter[] = "*"; // The default output file for XML ...
  • C++ 类中定义常量的方法

    千次阅读 2012-12-18 11:00:27
    1.在类定义体内定义枚举常量;  例如: class A { public: enum { THREAD_NUM = 100, MEM_BLOCK_SIZE = 1024, PORT = 8080 }; }; 这样定义出来的常量值在程序运行过程是不能被修改的,编译的时候就已经...
  • C++ 定义常量const

    2019-02-26 20:59:22
    //只能在定义常量的函数里使用(如main函数中定义,则area函数就不能用),如果定义在位置则整个程序的任何位置都可以用 double area(double r) { return PI*r*r; } int main() { ...
  • C++定义数组大小用常量

    千次阅读 2021-02-04 17:23:00
    新建一个需要从键盘输入大小的数组时,程序报错 int n; cin>>n; int a[n]; 采用动态内存分配的方法,修改为: int n; cin>>n; int *a = new int[n]; . . . delete[] a; 参考:...
  • c++11 编译期常量定义

    2020-05-08 10:34:37
    c++11之前,在类中定义编译期常量的方法: template<typename Type> struct Size { static const int x = 1; }; template<typename Type> struct Size { enum{ x = 1, y = 2 }; }; 在c++11中定义...
  • C++_常量成员

    千次阅读 2019-05-29 16:20:33
    、关于C++的四强转 格式:类型(变量、表达式、值) (C语言的强转方式C++适用,但是C++的强转C语言不适用) 1.static_cast 格式:static_cast<类型1>(值); 说明: 值将会转换成类型1...
  • namespace!借助命名空间的变量可以全局范围访问的特性。
  • c++中静态字符串常量定义方法

    千次阅读 2017-12-01 13:14:32
    写过c#或则java的知道可以在类中定义静态或自读的字符串常量,但是在c++里面实现方法不一样,在c++的头文件里面直接:static const std::string CONST="str"; 这样是无法编译通过的,c++只允许像int类型的静态变量...
  • 对于局部常量,存放栈区; 对于全局常量,编译期一般不分配内存,放在符号表以提高访问效率; 字面值常量,比如字符串,放在常量区。 转载于:https://www.cnblogs.com/pacino12134/p/11255408.html...
  • C++中内存布局,内存地址:栈区>堆区>静态存储区 一、字符串常量和字符串变量 我们知道字符串常量是存储文字常量区,也即C++中的静态存储区。 而字符串变量一般定义在栈...//字符串变量ss一个字符h的存

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,399
精华内容 83,759
关键字:

c++在类中定义一个常量

c++ 订阅