通过引用从函数调用C++构造函数
C++ Constructor called from function by reference
我正在做一些C++测试,但我不理解下面的代码:
class A
{
public:
A(int n = 0): m_n(n)
{
std::cout << 'd';
}
A(const A& a): m_n(a.m_n)
{
std::cout << 'c';
}
private:
int m_n;
};
void f(const A &a1)
{
}
int main()
{
//Call 'f' function and prints: d
f(3);
return 0;
}
我不明白的是,为什么在这里调用构造函数并打印"d"?
谢谢。
将int
值传递给想要引用A
值的函数。为了提供该参数,使用转换构造函数A(int)
创建临时A
,打印'd'
。
在函数返回后,临时函数将在表达式语句的末尾销毁。
请注意,只有当引用是const
或右值引用时,这才有效。临时值不能绑定到非常量左值引用;因此,如果参数类型是A&
,那么应该会得到一个错误。
它还要求转换可以隐含地进行;您可以通过声明构造函数explicit
来阻止这种转换。
A(int n = 0): m_n(n)
{
std::cout << 'd';
}
这是一个转换构造函数。当函数需要A
类型的参数,但提供了int
变量时,将使用此转换构造函数将其隐式转换为A
。
为了避免这种隐式转换,可以将explicit
说明符添加到构造函数中。
explicit A(int n = 0): m_n(n)
{
std::cout << 'd';
}
相关文章:
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 选择要调用的构造函数
- 如何委托派生类使用其父构造函数?
- 构造函数正在调用一个使用当前类类型的函数
- 没有用于初始化C++中的变量模板的匹配构造函数
- 初始化具有非默认构造函数的std::数组项的更好方法
- 当从函数参数中的临时值调用复制构造函数时
- 在c++构造函数中使用随机字符串生成器
- 一对向量构造函数:初始值设定项列表与显式构造
- 从构造函数抛出异常时如何克服内存泄漏
- 我不明白为什么我声明一个空的内部结构并将其传递给构造函数
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 具有默认模板类型的默认构造函数的类型推导
- 使用dynamic_cast和构造函数时出错
- 在c++中使用向量时,如何调用构造函数和析构函数
- 奇怪的构造函数行为