-1
void f(string &x);
..
f(string("hello1"));
...
f(new string("hello2"));
  1. 编译器如何知道 string("hello1") 是函数调用还是构造函数调用?
  2. hello1 和 hello2 有什么区别?
4

1 回答 1

2

1)从上下文来看,一般来说。例如,C++ 没有像 Rust 这样的上下文无关语法。但是在这种特殊情况下,它始终是字符串构造。另外,请注意它不会编译,因为您会将右值传递给非常量引用。

2) hello2 在堆上创建一个新的字符串对象,而 hello1 没有。另外,请注意,您不能将指针传递给期望这样的引用的函数。它不会简单地使用 msvc、gcc、cland 等构建。

于 2013-08-24T05:32:22.967 回答