【发布时间】:2009-02-15 13:22:43
【问题描述】:
是否可以将映射元素值的引用传递给函数,并在那里修改它?
foo(string & s)
{
s = "xyz";
}
map<int, string> m;
m[1] = "abc";
foo(m[1]); // <-- Is it ok? Will m[1] be "xyz" after this call?
谢谢。
【问题讨论】:
是否可以将映射元素值的引用传递给函数,并在那里修改它?
foo(string & s)
{
s = "xyz";
}
map<int, string> m;
m[1] = "abc";
foo(m[1]); // <-- Is it ok? Will m[1] be "xyz" after this call?
谢谢。
【问题讨论】:
答案是肯定的。
(运算符 [] 返回一个reference)
【讨论】:
是的,我们可以。
它也适用于std::vectors(而且由于您使用数字键,因此您可以考虑使用它们)。
【讨论】:
是的。
这与键入 m[1] = "xyz" 没有什么不同。编译器完成后会将其简化为大致相同的内容。
【讨论】:
忠告:您可能希望将其作为指针而不是引用传递。我这样做是为了让普通读者更清楚它会被改变。
这一切都是为了与必须维护此代码的下一个人进行清晰的沟通。
但除此之外,是的,这是完全合法的代码!
【讨论】:
是的,这很好 - 正如每个人都已经说过的那样 - 而且,如果不是,您的编译器会告诉您。您可能想尝试一下;尝试将 "hello" 或 (42) 传递给 foo(string&) 以了解编译器给您的警告。
【讨论】: