问题1
有网友问这样一个问题:
Is there any way to use QString as a parameter in switch case as shown below.
QString str;
switch(str)
{
case "A":
break;
case "B":
break;
}
潜意识告诉我这样肯定不行,可是证据呢?连自己都说服不了,难受。
只好翻翻C++标准了。还好,很容易就找到了(ISO C++ 6.4 节):
- switch 语句中的“条件”,必须是
- 整数或enum类型的变量,或
- 可以隐式转换成整数或enum类型的变量
由于QString没有 operator int() 这类的成员函数,故不可以。
标准原文:
- The value of a condition that is an initialized declaration in a switch statement is the value of the declared variable if it has integral or enumeration type, or of that variable implicitly converted to integral or enumeration
type otherwise.
恩,那么case后面可以是“A”这种东西么?ISO C++ 6.4.2,对此有规定:
标准原文:
问题二
void main(){
int a = a;
}
A compiler通过, linker不能通过.
B compiler不能通过
C 视乎具体compiler而定
咱们忽略 main 函数的这个不规范的写法,假定它的意图就是问inta=a;这一句。
这个东西有没有问题?翻标准,恩 ISO C++ 3.3.2
没任何问题:
int x = 12;
{ int x = x; }
第二个x将使用它自己的值(尽管是不确定的值)进行初始化。与第一个x无关。
标准中还给出的其他的例子:
const int i = 2;
{ int i[i]; }
恩,和先前不同,块作用域内定义了一个两个整数元素的数组。
const int x = 12;
{ enum { x = x }; }
恩,对于枚举量,x的值初始化为12。也和先前不同。
标准原文(只贴出一段):
问题三
使用typeid实验结果是:
typeid(int()) != typeid(int)
typeid(int()) != typeid(i) // int i
so...
int()是啥东西?
恩,int() 是什么东西呢?
当我们这样写时,应该就比较清楚了
int a();
是一个函数的声明,那么 int() 就是函数类型了。
只是,有个疑问,楼主既然用到typeid了,为何不使用 type_info::name() 来输出类型信息看看呢?
于是写个例子:
#include <stdio.h>
#include <typeinfo>
int main()
{
printf("%s\n", typeid(int()).name());
printf("%s\n", typeid(int).name());
return 0;
}
用GCC编译运行(如果用的MSVC,生成的可读性很好的字符串)
FivE
i
啊,难怪,原来这个和名字改编几乎一样的东西,很难读懂。既然输出都输出了,试试读读看:
GCC4使用的 Itanium C++ ABI,于是找到这个网页:
F...E
|
函数
|
i
|
返回值为 int
|
v
|
参数为 void
|
恩,简单的函数还好办,如果复杂的类型还真麻烦。幸好,GCC提供有demangle的函数:
恩,改写如下:
#include <stdio.h>
#include <typeinfo>
#include <cxxabi.h>
int main()
{
char * realname = abi::__cxa_demangle(typeid(int()).name(), 0, 0, 0);
printf("%10s ==> %15s\n", typeid(int()).name(), realname);
realname = abi::__cxa_demangle(typeid(int(*)()).name(), 0, 0, 0);
printf("%10s ==> %15s\n", typeid(int(*)()).name(), realname);
realname = abi::__cxa_demangle(typeid(int).name(), 0, 0, 0);
printf("%10s ==> %15s\n", typeid(int).name(), realname);
return 0;
}
结果:
FivE ==> int ()()
PFivE ==> int (*)()
i ==> int
参考
分享到:
相关推荐
《C++小游戏集合》 这个资源包集合了一个多样化的C++编程实现的小游戏,适合对C++编程感兴趣的初学者和爱好者。C++是一种强大的、通用的面向对象编程语言,以其高效性和灵活性闻名,广泛应用于游戏开发、系统软件、...
使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏源码 使用C++编写的超级玛丽小游戏...
C++小游戏 LightCycles (VisualCPP代码作业)C++小游戏 LightCycles (VisualCPP代码作业)C++小游戏 LightCycles (VisualCPP代码作业)C++小游戏 LightCycles (VisualCPP代码作业)C++小游戏 LightCycles (VisualCPP代码...
百鸡问题是经典的数学问题,它...通过这个百鸡问题的C++实现,我们可以学习到如何将数学问题转化为编程问题,以及如何利用循环和条件判断来解决实际问题。这不仅锻炼了我们的逻辑思维能力,也加深了对C++语言的理解。
在本资源中,我们得到了一个名为“好玩的C++小游戏,运行即可”的压缩包,它包含了一个基于C++编程语言开发的小游戏。C++是一种强大的、面向对象的编程语言,常用于开发系统软件、游戏引擎、桌面应用以及各种高性能...
高频部分进一步分为水平、垂直和对角三个方向的小波系数。C++实现时,可以使用库如libwavelet或OpenCV,它们提供了现成的接口来执行二维小波变换和逆变换。 在C++中实现小波算法时,需要注意以下几点: 1. 数据结构...
本文将深入探讨标题和描述中提到的C++实用小程序,适合初学者进行编程实践。 1. **C++程序结构** C++程序通常由一个或多个源文件组成,每个源文件包含一个或多个函数。在初学者阶段,了解C++的基本结构至关重要。...
3. **改进C++程序的最好方法是什么?** 改进C++程序的方法有很多,但关键在于实践和反思。首先,熟练掌握基本语法和标准库的使用;其次,不断练习编写各种规模的程序来加深理解;最后,阅读高质量的源代码,学习...
三着色问题C++ 三着色问题C++
通过分析和运行这些小程序,不仅可以巩固C++的基础知识,还可以了解如何将理论应用于实际问题的解决。对于初学者来说,这是一种非常有效的学习方法,因为实践是理解编程概念的关键。同时,这些小程序也可以作为...
作者是新手,前两次格式发错了,补救一个DEV-c++小游戏大全
3. **STL(标准模板库)**:STL是C++的一个强大工具,包含容器(如vector、list、set等)、算法(如排序、查找等)和迭代器。通过源码,我们可以学习如何有效地使用这些工具来优化数据处理和算法实现。 4. **异常...
本项目中的源代码提供了三个小游戏的实现,这些游戏可以作为学习C++和游戏编程的实践案例。 1. **基础概念** 在C++中编程游戏需要理解以下几个核心概念: - **面向对象编程**:C++支持类和对象,这是游戏编程的...
在本压缩包中,我们主要关注的是"C++小程序代码",涵盖了多个小项目的源代码,包括数字迷宫、猜拳游戏以及日历系统。这些项目是学习和掌握C++编程语言的良好实践,可以帮助开发者深入理解面向对象编程的概念,以及...
着色问题c++实现
3. 绘图与图形库:C++本身并不支持图形绘制,但可以借助第三方库,如SDL(Simple DirectMedia Layer)、SFML(Simple and Fast Multimedia Library)或Allegro,来实现图形用户界面和动画效果。这些库提供了与硬件...
收集和整理的c++小游戏合集(115个): ABS五子棋(win7).cpp Beat BIT.cpp flappy_bird1(比2更精致,但有闪屏问题).cpp gmon.out move闯关.cpp qwq.cpp UNO.cpp yourcraft.cpp 三国杀AI(偶尔有BUG).cpp 三子棋...
3. 模板和泛型编程:C++的模板功能使得我们可以编写通用的代码,如在游戏中创建一个可以处理不同类型对象的容器。这在管理游戏资源、实现游戏逻辑等方面非常有用。 4. 输入/输出流(I/O流):在游戏运行过程中,C++...
在本资源中,标题"用C++实现的经典小游戏源代码"揭示了主要的主题,即使用C++编程语言编写的经典小游戏的源代码。这通常包括一些基础和进阶的编程概念,适合学习C++和游戏开发的初学者,以及希望巩固编程技能的...
C++小游戏 SpaceOut 3 (VisualCPP代码作业)C++小游戏 SpaceOut 3 (VisualCPP代码作业)C++小游戏 SpaceOut 3 (VisualCPP代码作业)C++小游戏 SpaceOut 3 (VisualCPP代码作业)C++小游戏 SpaceOut 3 (VisualCPP代码作业)...