这里声明的内容

What is being declared here?

本文关键字:声明 这里      更新时间:2023-10-16

今天早上(在我的一杯黑咖啡有机会"开始"之前(,我在一些代码中遇到了这个看起来很奇怪的声明。。。

IField const* f(0);

这在我看来有点不寻常。有人能解释变量f是什么吗?

它是一个初始化为0的IField const(或const IField(类型的指针'f'。与例如相同:const IField*f=0;

指向常量IField对象的非常量指针,用NULL值初始化。

它只是一个普通的对象声明。

从右到左读取类型:
成本总是靠左。

IField const*              f(0);
            ^ Pointer to
       ^^^^^  const
^^^^^^        IField.

因此,使用值初始化将其初始值设置为0的变量"f"是"指向"const IField"的指针"类型。

它相当于:

IField const* f   = 0;

IField const* f   = NULL;

这基本上意味着"f"是一个指针。它指向一个IField。它所指向的对象不能通过指针进行修改。但是"f"不是常量,所以我们可以更改"f"的值以指向不同的对象,但最初它是一个NULL指针。

IField const* f(0);

它使用构造函数风格的初始化语法,因此等价于:

IField const* f = 0;

由于涉及空指针文字,这类似于:

IField const* f = NULL;

接下来,假设const在有任何东西的情况下向左应用,否则向右应用,所以这也是一样的:

const IField* f = NULL;

这是你更习惯的语法吗?

它与const IField*相同。(如果星号后面有"const",它将是指向const的指针,而不是const指针。(

它是指向IField*引用的常量对象的指针。与相同

const IField*  f(0);