关于C++里面常量的使用

今天遇到一个问题说大不大,说小也够我吃一壶了,现在将这里的应用总结下来:


1. 在类里面定义常量的时候,对其初始化不能放在类的定义体里面执行,应该放在构造函数初始化列表中进行

        2. 第二个是在swich语句中,每个case后面都是一个常量表达式,在这里可以放置枚举,可以放置常数,但是const类型的就会导致编译错误。

3. const 的作用达到数据隐藏的功能,可以更清晰的知道该值的意图。

C++中,宏(Macro)是一种预处理指令,可以在编译前对代码进行文本替换。在(class)中使用宏控制可以用于条件编译、代码生成或调试信息控制等场景。以下是几种常见的用法: ### 1. **条件编译(`#ifdef` / `#ifndef` / `#endif`)** - 用于根据宏定义决定是否编译某段代码。 - 示例: ```cpp #define DEBUG_MODE // 定义宏 class MyClass { public: void someMethod() { #ifdef DEBUG_MODE std::cout << "Debug info: Method called!" << std::endl; #endif // 其他逻辑 } }; ``` - 如果 `DEBUG_MODE` 被定义,则 `std::cout` 语句会被编译;否则会被忽略。 ### 2. **宏定义常量** - 宏可以用于定义中的常量(但更推荐使用 `const` 或 `constexpr`)。 - 示例: ```cpp #define MAX_SIZE 100 class MyArray { private: int data[MAX_SIZE]; // 使用宏定义数组大小 }; ``` ### 3. **宏生成代码** - 宏可以用于自动生成重复代码,减少手动编写。 - 示例(生成 Getter/Setter): ```cpp #define GENERATE_GETTER_SETTER(type, name) \ type get##name() const { return m_##name; } \ void set##name(type val) { m_##name = val; } class Person { private: int m_age; std::string m_name; public: GENERATE_GETTER_SETTER(int, age) // 生成 getAge() 和 setAge() GENERATE_GETTER_SETTER(std::string, name) // 生成 getName() 和 setName() }; ``` ### 4. **调试日志控制** - 使用宏控制调试信息的输出。 - 示例: ```cpp #define LOG(msg) std::cout << "[LOG] " << msg << std::endl class MyClass { public: void doSomething() { LOG("Entering doSomething()"); // 业务逻辑 LOG("Exiting doSomething()"); } }; ``` ### 5. **平台适配(跨平台开发)** - 使用宏区分不同平台的代码。 - 示例: ```cpp #ifdef _WIN32 #define PLATFORM_API __declspec(dllexport) #else #define PLATFORM_API #endif class PLATFORM_API MyExportedClass { // Windows 下导出,其他平台不导出 // ... }; ``` ### **注意事项** 1. **宏是文本替换**,容易导致错误,建议谨慎使用。 2. **优先使用 `const` / `constexpr` / `inline`** 替代宏定义常量。 3. **避免滥用宏**,复杂的逻辑尽量用 C++ 本身的特性(如模板、继承)实现。 4. **调试宏**可以用 `#pragma message` 检查宏是否生效: ```cpp #pragma message("DEBUG_MODE is defined!") ``` --- ### **
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值