Trong khi nhìn vào một số mã C++ 03, tôi tìm thấy một thể hiện của các phân tích cú pháp gây nhiều tranh cãi nhất rằng nhầm lẫn tôi:phân tích cú pháp gây nhiều tranh cãi nhất với truy cập mảng
#include <sstream>
#include <string>
int main(int, char** argv)
{
std::stringstream ss(std::string(argv[0]));
}
Trong đoạn trên , ss
là khai báo hàm có số std::string*
và trả về std::stringstream
.
Làm thế nào là std::string(argv[0])
được phân tích cú pháp là std::string*
?
Trực giác Tôi nghĩ rằng argv[0]
là truy cập rõ ràng vào argv
.
này thất bại trong việc biên dịch cho tôi với Visual Studio 2015 vì 'argv [0] 'rõ ràng là một 0 kích thước mảng kiểu' argv'. Tôi có thể nhận được kết quả tương tự như bạn nếu tôi sử dụng 'argv [1]'. Câu hỏi thú vị. –
Tôi nghĩ rằng nó tương đương với 'std :: stringstream ss (std :: string argv []);' đó là chính nó tương đương với 'std :: stringstream ss (std :: string * argv);'. –
Tôi nghĩ rằng có một hướng dẫn này, _if nó trông giống như một tuyên bố nó là one_. Vì vậy, như @ FrançoisAndrieux đã viết instantiation của bạn từ std :: string không phải là một instantiation nhưng thay vì một tuyên bố cho mảng của std: strings – ExOfDe