【发布时间】:2018-05-26 08:02:28
【问题描述】:
在查看一些 C++03 代码时,我发现了一个让我感到困惑的最令人头疼的解析的实例:
#include <sstream>
#include <string>
int main(int, char** argv)
{
std::stringstream ss(std::string(argv[0]));
}
在上面的 sn-p 中,ss 是一个函数声明,它接受 std::string* 并返回 std::stringstream。
std::string(argv[0]) 是如何被解析为std::string* 的?
直觉上我认为argv[0] 无疑是对argv 的访问。
【问题讨论】:
-
这无法使用 Visual Studio 2015 为我编译,因为
argv[0]显然是argv类型的 0 大小数组。如果我使用argv[1],我可以得到和你一样的结果。有趣的问题。 -
我认为它等同于
std::stringstream ss(std::string argv[]);,它本身等同于std::stringstream ss(std::string * argv);。 -
我认为有一个准则,如果它看起来像一个声明,它就是一个。所以就像@FrançoisAndrieux 写你从 std::string 的实例化不是实例化,而是声明 std:strings 数组
-
CppCon 2017: Louis Brandy “Curiously Recurring C++ Bugs at Facebook” 链接设置为正确的时间码。我花了一段时间才想起我在哪个视频中了解到的,但完全符合您刚刚遇到的情况
标签: c++ c++03 most-vexing-parse