Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::make_对类型推断_C++_Templates_C++11_Stl - Fatal编程技术网

C++ std::make_对类型推断

C++ std::make_对类型推断,c++,templates,c++11,stl,C++,Templates,C++11,Stl,我遇到了一些奇怪的事情,我想解释一下。下面的代码片段提供了一个简单的类模板type和两个操作符 第一个失败是因为std::make_pair似乎从变量中删除了常量说明符,而常量说明符又与第二个运算符ep的签名不匹配。图书馆试图阻止你陷入一片混乱;使配对const,而不是它的元素。std::pair有两个成员,其const属性取决于模板参数,而不是std::pair本身的运行时const属性。ReqnRPSJ认为,即使 int 是可变的,也不能修改 int const和。@ BARRY MMH,

我遇到了一些奇怪的事情,我想解释一下。下面的代码片段提供了一个简单的类模板
type
和两个
操作符

第一个失败是因为
std::make_pair
似乎从变量中删除了常量说明符,而常量说明符又与第二个
运算符ep的签名不匹配。图书馆试图阻止你陷入一片混乱;使配对
const
,而不是它的元素。
std::pair
有两个成员,其
const
属性取决于模板参数,而不是
std::pair
本身的运行时
const
属性。ReqnRPSJ认为,即使<代码> int <代码>是可变的,也不能修改<代码> int const和<代码>。@ BARRY MMH,<代码> int const和实际上说<代码>引用常量INT/COM>,这显然禁止变异<代码> int >代码>。otoh,
int*const
是指向int
常量指针,因此
int
是可变的,只是指向它的指针不能更改。但是,我同意你的观点,可能需要提交一份缺陷报告,其中包括语言律师;)@regnirpsj,嗯?什么样的缺陷报告?我认为STD::配对和STD::MaMuxAB对没有好处(特别是用STD::MAP,其中STD::MaMuxGub(key,value)不提供MAP::ValueSyType)。@ MARCO-A感谢编辑编译器消息。医生不太清楚怎么做。您是否使用了
标记?@regnirpsj不,当有一个项目符号列表时,需要两倍的代码空间。应该在某处说明。
std_make_pair.cpp: In function 'int main()':
std_make_pair.cpp:52:35: error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
   std::cout << std::make_pair(a, b) << std::endl;
                               ^
In file included from std_make_pair.cpp:3:0:
/usr/include/c++/4.9.2/ostream:602:5: note: initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = std::pair<type<float>, type<float> >]'
 operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
 ^
std_make_pair.cpp:52:13: error: invalid operands to binary expression ('ostream' (aka 'basic_ostream<char>')
  and 'pair<typename __decay_and_strip<const type<float> &>::__type, typename __decay_and_strip<const
  type<float> &>::__type>')
  std::cout << std::make_pair(a, b) << std::endl;
  ~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~

std_make_pair.cpp:30:1: note: candidate template ignored: can't deduce a type for 'T' which would make
  'const T' equal 'type<float>'
operator<<(std::basic_ostream<CTy,CTr>& os, std::pair<T const, T const> const& a)
template <class T1, class T2>
  constexpr pair<V1, V2> make_pair(T1&& x, T2&& y);
template <typename CTy, typename CTr, typename T>
std::basic_ostream<CTy,CTr>&
operator<<(std::basic_ostream<CTy,CTr>& os, std::pair<T, T> const& a)
{
  return os << a.first << ',' << a.second;
}