đang Minimal tái tạo vấn đề:Tại sao trình biên dịch sử dụng biến tạm thời?
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
CComBSTR ccbTest(L"foo");
const wchar_t * pTest = ccbTest ? ccbTest : L"null string";
return 0;
}
Trình biên dịch sử dụng tạm thời CComBSTR
khi nó muốn để lưu trữ một con trỏ trong pTest
. Sau đó, nó sử dụng chuyển đổi BSTR
có sẵn trong lớp CCcomBSTR
, với tạm thời và lưu con trỏ trong pTest
. Sau đó, tạm thời bị phá hủy, và tôi còn lại với một con trỏ lơ lửng trong pTest
.
Việc sửa chữa là để đúc các CComBSTR
:
const wchar_t * pTest = ccbTest ? static_cast<BSTR>(ccbTest) : L"null string";
Tôi không hiểu lý do tại sao việc sửa chữa là cần thiết. Tôi nghĩ rằng trình biên dịch sẽ chỉ cố gắng tự chuyển đổi thành BSTR
. Tại sao tạm thời?
Hãy thử mã của tôi, gỡ lỗi và bước vào các cuộc gọi: có một tạm thời, ngay cả khi bạn không "nhìn thấy" nó :-) – manuell