这里声明的内容
What is being declared here?
今天早上(在我的一杯黑咖啡有机会"开始"之前(,我在一些代码中遇到了这个看起来很奇怪的声明。。。
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);
相关文章:
- 警告处理为错误这里有什么问题
- .cpp和.h文件中的模板专用化声明
- 努力将整数转换为链表。不知道我在这里做错了什么
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 在基于范围的for循环中使用结构化绑定声明
- 在将变量声明为引用时,堆在释放后使用
- C++:无法访问声明的受保护成员
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- "类"在这里有一个先前的声明
- 这里声明的内容
- 为什么我要在这里显式地声明内联函数
- 在这里你可以在c++中声明变量