最近我见过如下例子:
#include <iostream>
class Foo {
public:
int bar;
Foo(int num): bar(num) {};
};
int main(void) {
std::cout << Foo(42).bar << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这奇怪: bar(num)意味着什么?它似乎初始化成员变量,但我以前从未见过这种语法.它看起来像一个函数/构造函数调用,但对于一个int?对我没有任何意义.也许有人可以启发我.而且,顺便说一下,还有其他类似的深奥语言功能,你永远不会在一本普通的C++书中找到它吗?
我这里有一些C++代码:
class demo
{
private:
unsigned char len, *dat;
public:
demo(unsigned char le = 5, unsigned char default) : len(le)
{
dat = new char[len];
for (int i = 0; i <= le; i++)
dat[i] = default;
}
void ~demo(void)
{
delete [] *dat;
}
};
class newdemo : public demo
{
private:
int *dat1;
public:
newdemo(void) : demo(0, 0)
{
*dat1 = 0;
return 0;
}
};
Run Code Online (Sandbox Code Playgroud)
我的问题是,有什么: len(le)和: demo(0, 0)被称为?
它与继承有关吗?
冒号运算符(":")在这个构造函数中做了什么?它等同于MyClass(m_classID = -1, m_userdata = 0);?
class MyClass {
public:
MyClass() : m_classID(-1), m_userdata(0) {
}
int m_classID;
void *m_userdata;
};
Run Code Online (Sandbox Code Playgroud) 对于下面的C++函数:
cross(vector<int> &L_, vector<bool> &backref_, vector< vector<int> > &res_) :
L(L_), c(L.size(), 0), res(res_), backref(backref_) {
run(0);
}
Run Code Online (Sandbox Code Playgroud)
冒号(":")告诉左右两部分之间的关系是什么?可能,这段代码可以说什么呢?
假设我有
std::map< std::string, std::string > m_someMapA类的私有成员变量
两个问题:(我问的唯一原因是因为我遇到过这样的代码)
这条线的目的是什么:
A::A() : m_someMap()
Run Code Online (Sandbox Code Playgroud)
现在我知道这是初始化,但你必须这样做吗?我糊涂了.
什么是默认值std::map< std::string, std::string > m_someMap,C#还定义int,double等始终初始化为defualt 0且对象为null(至少在大多数情况下)那么C++中的规则是什么?是对象初始化为defualt为null和原语为垃圾?当然我正在考虑实例变量.
编辑:
另外,既然大多数人都指出这是一种风格选择而不是必要的,那么:
A :: A():m_someMap(),m_someint(0),m_somebool(false)
请问有人能告诉我这个操作符在C++函数中的功能吗?
class simplecanny
{
ros::NodeHandle nh_;
ros::NodeHandle n;
ros::Publisher pub ;
image_transport::ImageTransport it_;
image_transport::Subscriber image_sub_; //image subscriber
image_transport::Publisher image_pub_; //image publisher(we subscribe to ardrone image_raw)
std_msgs::String msg;
public:
*** simplecanny()
: it_(nh_) ***
{
image_sub_ = it_.subscribe("/ardrone/image_raw", 1, &simplecanny::imageCb, this);
image_pub_= it_.advertise("/arcv/Image",1);
}
~simplecanny()
{
cv::destroyWindow(WINDOW);
}
...
Run Code Online (Sandbox Code Playgroud)
在simplecanny() : it_(nh_)构造函数中,我不熟悉该: it_(nh_)部分.它有什么作用?这是运算符重载的情况吗?
提前致谢!