假设我有以下代码:
#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
为什么呢?这背后的原因是什么?这是一个错误吗?