【发布时间】:2014-09-16 22:35:22
【问题描述】:
在我之前的question 中(不要问我为什么要创建一个新帐户)我问我的测试课程是否正在创建一个 VLA。 answerer 也提出了这个问题:
一个(可能很重要的)皱纹是
string_test<T, m>和string_test<T, n>和m != n是不同的类型。
我可以通过创建一个新的 string_test 并将大小加在一起来轻松解决这个问题。但是对于 operator+= 这不起作用,因为大小(更准确地说,私有数据成员 buffer[n])无法更改。
template <typename U, size_t m>
string_test<T, m + n> operator+(const string_test<U, m>& rhs)
{
char tmp[n + m]; // not VLA, size known at compile-time
strcpy(tmp, _buffer);
strcat(tmp, rhs._buffer);
return make_string(tmp);
}
operator+= 应该返回一个引用和*this。 operator+=的实现方式是什么?
【问题讨论】:
-
你想
+=一个固定大小的数据结构?这甚至意味着什么? -
您为什么要创建一个新帐户? :) 这不好。
-
您声称问题是
buffer无法更改,但此代码中没有名为buffer的变量。此外,我认为调用make_string在这里没有用处。 -
其实,你为什么还要这样一个固定大小的字符串呢?因为我不确定你是否想要一个固定大小的字符串类的
+=,除非它只是一个固定大小的缓冲区,在这种情况下,+=应该 not 导致不同的类型。在这两种情况下,您都没有返回不同类型的+=。
标签: c++ templates operator-overloading