简单好玩的C++关键字mutable

mutable是一个好玩的C++关键字,也是我第一次遇到。于是查了查msdn,结果发现果然是好玩的关键字。
首先,它只能修饰非const,非static的类数据成员。
其次,它用来突破const函数。
再次,它就这么一个功能。

class X
{
public:
	// 在逻辑上GetFlag只是获取我的m_flag状态,所以修饰为const
	// 但是,我需要知道其中一些动态的状态,所以mutable就诞生
	// 了,而且专门为此而诞生。
	bool GetFlag() const
	{
		m_accessCount++;
		return m_flag;
	}
private:
	bool m_flag;
	// 本关键字的游戏规则是非const,非static
	mutable int m_accessCount;
};


总结:思路简单,设计简单,功能简单。

<think>嗯,用户想要找一些有趣的C语言代码示例。首先,我需要回顾一下之前提供的引用内容,看看里面有没有合适的例子。引用[1]提到了打印ASCII表的代码,引用[4]里提到了心算训练,还有一些模块化编程的例子。这些都可以作为有趣的示例。 然后,用户可能希望这些代码不仅仅是简单的例子,而是能展示C语言的一些特性,比如指针、位运算或者递归。比如,打印ASCII表可以展示循环和字符处理,心算训练可能涉及随机数和输入输出。模块化编程的例子则能体现代码结构和函数的使用。 接下来,我需要确保这些代码符合用户的要求:有趣且能帮助理解C语言的基础知识。可能还需要考虑代码的复杂度,不能太简单也不能太复杂。比如,递归的斐波那契数列虽然经典,但可能不够有趣,可以换成其他更有创意的例子,比如动画效果或者图形生成。 另外,用户提到示例代码要使用中文注释,所以需要将代码中的注释翻译过来,但代码本身还是用英文变量名,保持通用性。同时,要注意代码的正确性,比如在随机数生成时使用srand和time函数来初始化种子,避免每次生成相同的数列。 还要考虑用户可能的深层需求,比如他们可能想通过这些有趣的例子来保持学习兴趣,或者用于教学,所以代码需要有一定的实用性和教育意义。例如,斐波那契数列可以展示递归和迭代的区别,ASCII艺术显示则能展示循环和条件判断的结合。 最后,生成相关问题时要围绕这些示例,询问它们的原理、应用场景或优化方法,帮助用户进一步探索。比如,询问如何优化斐波那契数列的计算效率,或者如何扩展ASCII动画的复杂度。</think>以下是一些有趣的C语言代码示例,展示语言特性与编程技巧: ### 1. ASCII字符艺术动画 ```c #include <stdio.h> #include <unistd.h> int main() { int i = 0; while(1) { printf("\033[2J\033[H"); // 清屏指令 for(int y=0; y<10; y++){ for(int x=0; x<20; x++) putchar((x+i)%2 ? '#' : '*'); putchar('\n'); } i++; usleep(200000); // 200ms延迟 } return 0; } ``` 该代码实现动态变化的ASCII字符图案,使用终端控制序列清屏[^3],演示了循环控制与终端交互技巧。 ### 2. 心算训练程序(模块化编程示例) ```c #include <stdio.h> #include <stdlib.h> #include <time.h> // 生成随机算式 void generate_question(int *a, int *b) { *a = rand()%100; *b = rand()%100; } // 验证答案 int check_answer(int a, int b, int ans) { return (a + b) == ans; } int main() { srand(time(NULL)); int score = 0; for(int i=0; i<5; i++){ int x,y; generate_question(&x, &y); printf("%d + %d = ? ", x, y); int user_ans; scanf("%d", &user_ans); if(check_answer(x,y,user_ans)){ printf("正确!\n"); score += 20; } else { printf("错误!正确答案:%d\n", x+y); } } printf("最终得分:%d/100\n", score); return 0; } ``` 该示例演示函数封装与指针传参[^2],实现交互式数学训练程序。 ### 3. 二进制可视化工具 ```c #include <stdio.h> void print_binary(unsigned char num) { for(int i=7; i>=0; i--) putchar( (num & (1 << i)) ? '1' : '0' ); putchar('\n'); } int main() { char c = 'A'; printf("字符 %c 的二进制表示:\n", c); print_binary(c); printf("按位取反后:\n"); print_binary(~c); return 0; } ``` 此代码通过位运算实现二进制可视化[^1],展示底层数据处理能力。 ### 4. 递归图形生成 ```c #include <stdio.h> void recursive_triangle(int n) { if(n <= 0) return; recursive_triangle(n-1); for(int i=0; i<n; i++) putchar('*'); putchar('\n'); } int main() { recursive_triangle(5); return 0; } ``` 输出: ``` * ** *** **** ***** ``` 演示递归调用与图形生成[^4]的结合应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值