我从这里得到了代码.
class Timer {
public:
Timer();
};
class TimeKeeper {
public:
TimeKeeper(const Timer& t);
int get_time()
{
return 1;
}
};
int main() {
TimeKeeper time_keeper(Timer());
return time_keeper.get_time();
}
Run Code Online (Sandbox Code Playgroud)
从它的外观来看,由于该行应该会出现编译错误:
TimeKeeper time_keeper(Timer());
Run Code Online (Sandbox Code Playgroud)
但只有在return time_keeper.get_time();
存在的情况下才会发生 .
为什么这条线甚至很重要,编译器会发现time_keeper(Timer() )
构造上的含糊不清.
我正在学习C++,我对int变量的初始化感到有点困惑.
这段代码(包括注释)是Nawaz在本主题中的答案的复制/粘贴为什么C++需要用户提供的默认构造函数来默认构造一个const对象?
struct POD
{
int i;
};
POD p1; //uninitialized - but don't worry we can assign some value later on!
p1.i = 10; //assign some value later on!
POD p2 = POD(); //initialized
Run Code Online (Sandbox Code Playgroud)
对于p2,我了解到以下情况:
但是,评论说p2已初始化!欢迎任何解释.谢谢.
这段特殊代码的作用是什么?更准确地说,测试tob(); 做?
class test {
private:
int a;
int b;
public:
test (int);
test();
};
test::test() {
cout<<"default";
}
test::test (int x=0) {
cout<<"default x=0";
}
int main() {
test tob();
}
Run Code Online (Sandbox Code Playgroud)
我不知道什么测试tob(); 做,但它没有给出任何编译错误.
有人能告诉我为什么编译器会给出错误.
class A
{
private:
int data;
public:
A();
A(A& a) { this->data = a.data; }
};
void main()
{
A a();
A b(a);
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误就是这个.
error C2664: 'A::A(A &)' : cannot convert parameter 1 from
'A (__cdecl *)(void)' to 'A &'
Run Code Online (Sandbox Code Playgroud) #include<iostream>
using namespace std;
class base {
public:
base() {
cout<<"Constructing base \n";
}
virtual ~base() {
cout<<"Destructing base \n";
}
};
class derived: public base {
public:
derived() {
cout<<"Constructing derived \n";
}
~derived() {
cout<<"Destructing derived \n";
}
};
int main(void) {
derived d();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么在这个程序中它没有调用构造函数?
谁能解释一下?
.......