对 cout 的 C++ 内存地址

C++ memory addresses of pair cout

当我使用下面的代码时,我在这对的第二项之前得到了一个内存地址(?),如下所示: 666, 0x6090e8667 666, 0x6090e8667 666, 0x6090e8667.

我做错了什么?

std::vector<std::vector<std::vector<std::pair<int,int> > > > total;

int main()
{

  total.resize(10);
  for (int i = 0; i < 10; ++i)
    {
      total[i].resize(10);
    }

  for (int i = 0; i < 10; i++)
    {
      total[0][0].push_back(std::make_pair(666,667));
    }

  for (int i=0; i<3; i++)
    {
      std::cout << total[0][0][i].first << ", " <<
      std::cout << total[0][0][i].second << '\t';
    }
  std:: cout << std::endl;

}
std::cout << total[0][0][i].first << ", " <<
std::cout << total[0][0][i].second << '\t';

由于第一行末尾的 <<,您将 std::cout(在第二行)输出到 cout,就好像您输入 [=14] =].显然你的编译器有一个重载或转换导致它显示一个内存地址(尽管它可能无法在其他编译器上编译)。

要么用分号替换它,要么从第二行中删除 std::cout <<

为了

std::cout << total[0][0][i].first << ", " <<

你的意思可能是

std::cout << total[0][0][i].first << ", ";

您已使用std::cout << total[0][0][i].first << ", " <<。该行末尾的额外 <<(没有分号)最终会将下一个 std::cout 输出到您的第一个 std::cout 语句中。

它的行为是这样的:std::cout << std::cout 导致地址被显示。

您可能想使用: std::cout << total[0][0][i].first << ", "; 相反。