相关疑难解决方法(0)

有关boost :: swap的问题

几个问题boost::swap.请参考下面的代码,它基本上是一个剪切粘贴boost/swap.hpp.我指的是库版本1.43.0.

namespace boost_swap_impl
    {
      template<class T>
      void swap_impl(T& left, T& right)
      {
        using namespace std;//use std::swap if argument dependent lookup fails
        swap(left,right);
      }

  template<class T, std::size_t N>
  void swap_impl(T (& left)[N], T (& right)[N])
  {
    for (std::size_t i = 0; i < N; ++i)
    {
      ::boost_swap_impl::swap_impl(left[i], right[i]);
    }
  }
}

namespace boost
{
  template<class T1, class T2>
  void swap(T1& left, T2& right)
  {
    ::boost_swap_impl::swap_impl(left, right);
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么boost::swap声明为template <typename T1, typename T2>在其余代码中它处理相同类型的时间? …

c++ boost

14
推荐指数
1
解决办法
1321
查看次数

为什么编译器会在重载时停止名称查找?

我刚读过这篇文章:C++命名空间的乐趣 作者表明编译器在遇到第一个时会停止查找重载,这里使用命名空间.

namespace A
{
   void f(int x); // like our std::sqrt(double)
}

namespace B
{
   struct S {}; // user-defined type with associated namespace B

   void f(S);
   void f(int, int);

   void test1()
   {
      using namespace A; // using DIRECTIVE
      f(1);              // ERROR  namespace A is not considered because
                         //        B contains two overloads for 'f'
      f(1,2);            // OK     B::f(int,int)
      f(B::S());         // OK     B::f(S)
   }   

   void test2()
   {
      using A::f; // using DECLARATION
      f(1);       // OK     A::f(int)
      f(1,2);     // …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction

3
推荐指数
1
解决办法
121
查看次数

为什么int对象和函数类型之间不明确?

这是代码示例:

namespace A
{
  int k;
}
void k(int,int){/*dosomething*/}
int main()
{
  using namespace A;
  k(1,1);//ooop!k is ambiguous!
}
Run Code Online (Sandbox Code Playgroud)

发生了什么?我认为它不应该是模糊的,因为它们是不同的类型.为什么它含糊不清?有了int k它是不可能的k(1,1).

所以它与名称实际上没有任何关系?即使一个不是函数类型的名称在使用时也会引起歧义k(1,1),这在语法中是错误的,因为int k它不是函数?

c++ c++11

2
推荐指数
1
解决办法
101
查看次数

标签 统计

c++ ×3

boost ×1

c++11 ×1

compiler-construction ×1