【发布时间】:2015-10-06 18:20:13
【问题描述】:
我正在阅读Why would a copy constructor have more than one parameter?。
接受的答案是:
旧的std::basic_string 也有一个:
basic_string(const basic_string& s,
size_type pos = 0, size_type n = npos)
但是http://www.cplusplus.com/reference/string/basic_string/basic_string/ 说:
basic_string (const basic_string& str, size_type pos, size_type len = npos,
const allocator_type& alloc = allocator_type());
上面不是复制构造函数,而是子字符串构造函数,它复制str 的一部分,该部分从字符位置pos 开始并跨越len 个字符。
C++ 标准部分说:
类 X 的非模板构造函数是一个复制构造函数,如果它 第一个参数的类型为 X&、const X&、volatile X& 或 const volatile X&,或者没有其他参数,或者其他所有参数 参数有默认参数
那么,该链接中接受的答案是否不正确?这真的是用于子字符串的 basic_string 类构造函数吗?我已经在链接上的 C++98、C++11 和 C++14 规范中检查了原型,所有显示都相同。
【问题讨论】:
-
@Downvoters:养成一种习惯,指定拒绝投票的原因。为什么要投反对票?
-
@owacoder:我认为这是对的。但是Brian Bi说quora.com/…不是复制构造函数。
-
对不起,我错了,我没有仔细阅读。我会在 Quora 上删除我的答案。
-
@PravasiMeet "Copy-constructor" 在 C++ 法律术语中具有特定含义。该构造函数是一个复制构造函数,因为它满足您引用的要求。它也可以被描述为一个子字符串构造函数(它不是一个 C++ 标准术语)来传达与它可以做的额外事情相关的额外含义。
-
@dyp - 是的,documentation 声称它没有默认的第二个参数,在这种情况下,它将 not 是一个复制构造函数,但引用的接受的答案声称它是。唔。谁是对的?
标签: c++ string parameters copy-constructor stdstring