对象构造函数或函数调用?

时间:2013-08-24 05:25:55

标签: c++

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

1 个答案:

答案 0 :(得分:2)

1)从背景来看,一般而言。例如,C ++没有像Rust这样的无上下文语法。但是在这种特殊情况下,它始终是字符串结构。另请注意,它不会编译,因为您将rvalue传递给非const引用。

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