使用就地结构初始化的Visual Studio中可能存在的错误

时间:2016-05-31 09:55:23

标签: c++ visual-studio visual-c++

假设我有以下代码:

#include <iostream>
#include <map>
#include <string>

struct Message
{
  std::string to;
  std::string text;
};

void foo(const Message& msg)
{
  std::cout << msg.to << ' ' << msg.text << std::endl;
}

int main()
{
  std::map<std::string, std::string> dict;
  dict["bar"] = "baz";

  foo(Message{ dict["bar"], "foobar" });
  foo(Message{ "baz", "foobar" });

  Message msg;
  msg.to = dict["bar"];
  msg.text = "foobar";
  foo(msg);
}

我希望输出为:

baz foobar
baz foobar
baz foobar

但是,Visual Studio 2013似乎采用了另一种方式:

 foobar
baz foobar
baz foobar

为什么呢?这背后的原因是什么?这是一个错误吗?

0 个答案:

没有答案