2013-05-28 71 views
5

我发现了一些我不明白的东西。std :: string s()奇怪的行为

std::string a(); 

打印出来时返回1。我不知道它来自哪里。我认为a()是一个没有参数的构造函数,但它看起来不是。

我在哪里可以找到关于这方面的信息?这是什么?

,并试图做std::string b(a);编译时喊道:

error: no matching function for call to ‘std::basic_string<char>::basic_string(std::string (&)())’ 

解释,将不胜感激。

+3

谷歌 “C++最棘手的解析”。 – Jon

+6

请参阅:http://en.wikipedia.org/wiki/Most_vexing_parse –

+4

人们,什么是所有的downvotes?答案如此明显,以至于你们所有人都会立即知道问题在何时?投票结束这个问题是一件很好的事情,但我们不要因为不知道而对周围的人进行打击。 – Jon

回答

5

这是一个函数声明,而不是一个字符串实例:

std::string a(); 

它声明了一个名为a,不带参数的功能,并返回一个std:string。这些实例:

std::string a; // C++03 and C++11 
std::string b{}; // C++11 syntax 
3
std::string a(); 

声明不带参数的函数和std::string作为返回类型。当您尝试打印它时,您打印的地址是true

警告:地址“的std :: string一个()”将始终评估为“真” [-Waddress]