编程论坛
注册
登录
编程论坛
→
C++教室
拷贝初始化 vector<int> = 10;为什么是错的
令狐少侠56
发布于 2017-03-10 10:06, 2488 次点击
拷贝初始化 vector<int> = 10;为什么是错的
这里C++primer说接受大小参数的构造函数是explicit的
我明白了explicit型的构造函数无法对参数转变类型。
可是这句话哪里调用构造函数了?
6 回复
#2
rjsp
2017-03-10 10:28
Type a = b;
等同于 Type a( b );
调用构造函数
#3
rjsp
2017-03-10 10:35
程序代码:
#include
<iostream>
struct
foo
{
/*
explicit
*/
foo(
int
v ) : v_(v)
{
std::
cout
<<
"
foo(
"
<< v_ <<
"
)\n
"
;
}
private
:
int
v_;
};
int
main(
void
)
{
foo a(
1
);
foo b =
2
;
//
如果foo::foo加了explicit限制则失败
foo c{
3
};
foo d = {
4
};
//
如果foo::foo加了explicit限制则失败
}
输出:
foo(1)
foo(2)
foo(3)
foo(4)
#4
令狐少侠56
2017-03-10 22:35
以下是引用
rjsp
在2017-3-10 10:35:37的发言:
#include <iostream>
struct foo
{
/*explicit*/ foo( int v ) : v_(v)
{
std::cout << "foo(" << v_ << ")\n";
}
private:
int v_;
};
int main( void )
{
foo a( 1 );
foo b = 2; // 如果foo::foo加了explicit限制则失败
foo c{ 3 };
foo d = { 4 }; // 如果foo::foo加了explicit限制则失败
}
输出:
foo(1)
foo(2)
foo(3)
foo(4)
如果 Type a = b;等同于 Type a( b );调用构造函数,
那么这里 foo b = 2;b调用的构造函数和a调用的构造函数有区别吗?
#5
rjsp
2017-03-11 16:48
回复 4楼 令狐少侠56
没有区别
#6
令狐少侠56
2017-03-11 22:08
以下是引用
rjsp
在2017-3-11 16:48:04的发言:
没有区别
那这样的话foo a( 1 ); foo b = 2; 不就都向构造函数传递的是整数了么?
#7
rjsp
2017-03-12 01:54
回复 6楼 令狐少侠56
怎么啦?
1