当我们有两个操作符用于输出对象和这些对象的数组,并尝试输出常量对象的数组时,会涉及到对象的操作符。是否有一种方法可以强制数组的操作符与常量对象的c数组一起工作?
示例代码:
示例代码:
#include <iostream>
#include <cstddef>
using std::size_t;
namespace nm
{
struct C { int i; };
template <size_t N>
using c_c_array = C[N];
inline std::ostream& operator << (std::ostream& lhs, C const*) { return lhs << "1\n"; }
template <size_t N>
inline std::ostream& operator << (std::ostream& lhs, c_c_array<N> const&) { return lhs << "2\n"; }
}
int main()
{
nm::C c{1};
nm::C arr[5];
nm::C const c_const{1};
nm::C const arr_const[5] {{1}, {1}, {1}, {1}, {1}};
std::cout << &c // 1 - ok
<< arr // 2 - ok
<< &c_const // 1 - ok
<< arr_const; // 1 --ups
return 0;
}
输出:1 2 1 1
此外,在我的情况下,运算符“2”用于输出“1”。
c_const{};
和arr_const[5]{};
。 - Rostislav