C++声明一个带括号的对象
C++ declare an object with parenthesis
可能的重复项:
使用空括号集调用默认构造函数时出错
我附有一个测试程序。问题:
如果我像下面这样声明,则没有创建对象和不调用默认构造函数。 'grCell c3();' 坏
然而像这样声明是可以的。创建一个对象并调用其构造函数。 'grCell c1;'//好
'grCell c3()' 和 'grCell c1' 有什么区别?
谢谢!
托德
//----开始-------
#include <iostream>
#include <cstdio>
typedef unsigned int uint;
using namespace std;
//
class grCell {
public:
grCell() { printf("HERE_0n"); };
grCell(int i) { printf("HERE_1n"); };
~grCell() {};
void setX(int x) { _x = x; }
//
//
private:
int _x:22;
};
int main()
{
grCell c1; // good
c1.setX(100);
grCell c3(); // bad
c3.setX(100);
grCell c2(5);
c2.setX(10);
}
//------结束------
grCell c3()
和grCell c1
有什么区别?
第一个声明一个函数,而第二个创建一个名为 c1
的对象,类型为 grCell
。
grCell c3();
它不创建对象,但声明一个名为 c3
的函数,该函数不带任何参数并返回类型为 grCell
的对象。
这是C++中最令人烦恼的解析。
你遇到了最烦人的解析。
grCell c3()
声明一个名为 c3
的函数,该函数返回一个grCell
。
grCell c3
声明一个名为 c3
的grCell
实例。
在C++,有句谚语,"任何看起来像函数的东西,都是函数"。
关于评论
grCell()
称为值初始化,如果默认构造函数是类类型,则grCell()
和grCell
调用默认构造函数。但是,int()
和int
不同,第一个版本零初始化对象。
相关文章:
- 如何返回一个类的两个对象相加的结果
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 如何使用gdb制作一个可以漂亮地打印每个对象的C++函数
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- PyRun_String返回一个NoneType对象
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 从多个源构造一个对象,包括一个对象向量
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 返回一个带有 std::move 的对象并链接函数
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问可调用对象 一个 boost::thread 是用来构造的
- 如何自动将 FLTK 的Fl_Input对象一个堆叠在另一个下面