Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1723855
  • 博文数量: 98
  • 博客积分: 667
  • 博客等级: 上士
  • 技术积分: 1631
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-27 15:59
个人简介

一沙一世界 一树一菩提

文章分类

全部博文(98)

文章存档

2021年(8)

2020年(16)

2019年(8)

2017年(1)

2016年(11)

2015年(17)

2014年(9)

2013年(4)

2012年(19)

2011年(1)

2009年(4)

分类: C/C++

2021-10-12 23:51:57

这几天阅读veloview源码,遇到2个和c++与QT有关的问题。以前没接触过c++和QT,感觉对于我的问题,对于写c++的人而言,应该是个小问题。不过,对于学习,遇到的问题记录下来总归是没有错的。
一 今天看qt的应用启动代码,发现这样两行:

点击(此处)折叠或打开

  1. QApplication qtapp(argc, argv);
  2.   ...
  3. QApplication::exec();
QApplication实例化对象qtapp,下面直接执行类函数exec,没有使用对象来执行。静态类成员函数?用的vscode看的代码。光标指在exec处,F12,直接调到exec函数,不是static,我就疑惑了。以前看到的qt例子基本都是对象执行exec的啊。经过查阅,才明白,如下:
  1    首先,这确实是一个static类成员函数,声明时候有static,定义时候没有,这一点和C不同;
  2    当调用一个对象的非静态成员函数时,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数并不在此列;
  3   static成员属于类,而不属于某个对象,使用静态成员变量实现多个对象共享数据,不破坏c++的封装原则,还节省空间;
  4   static成员存储在数据段,而对象空间一般在栈上分配,这个和C比较类似;关于这一点,感觉c++的内存分配和c还是有一点区别的,可以参考c++对象模型相关的描述。
  5    c++规定,const静态类成员可以直接初始化,其它非const静态成员在类外初始化或定义,且定义时去掉关键字,如类内声明时static变量或函数,类外定义时不用static关键字;
  6   类和对象都可以直接执行static函数;

二  第二个问题,看下面2行代码:

点击(此处)折叠或打开

  1. using InitializerT = pqVeloViewInitializer;
  2. InitializerT pvInitializer;
  3. InitializerT::Status status = pvInitializer.Initialize(argc, argv);
左值第一次出现,右面是一个类。
没有写过c++,但是起码看过简单的例子,以前的c++,基本还能看明白,看到这就。。。。。都不知道怎么查。有人提醒c++新特性。网上查阅,果然听人劝,吃饱饭,真是新特性。。基本就是typedef的功能。貌似c++11以后的新特性:指定别名。具体如下:
    1  using a = b,   等同于  typedef b    a,这个using的优势不明显;
    2  using P = void (*)(int, int),等同于  pytedef  void (*P)(int, int),哪个简单明了;
    3  模板举例,略

总之就是为了阅读方便,但是在此处这么用,除了让人知道这是在init,也没有其它太明显的作用啊,感觉不如直接执行对象的init,简单粗暴还明了。费力不讨好还是有其它我没理解到的地方?


阅读(863) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~