I should point out, doing something like:
BSTR str = L"my string";
is not entirely correct, because technically a BSTR is a length-prefixed (Pascal style) string, and L"" constructs a null-terminated (C style) string. The two are slightly different beasts.
By length-prefixed I mean the actual length of the string in bytes (18 in this case) is stored as an integer in memory just before the first character of the string.
If you were to pass this BSTR to any function that expects to find the length, it would probably crash. Also, performing this sort of assignment throws away the "const"-ness of the original string, which is bad form.