C++ 将CString转换为不带';GetString()';

C++ 将CString转换为不带';GetString()';,c++,type-conversion,cstring,stdstring,C++,Type Conversion,Cstring,Stdstring,如果m_attr.GetValue()返回一个CString,则: 为什么下面的代码工作时没有错误消息。。。是否仅显示警告消息“C4927” std::string sigCncDialog::GetSignalAttributeValue() {return m_attr.GetValue();} 正确的答案当然是: std::string sigCncDialog::GetSignalAttributeValue() {return m_attr.GetValue().GetString(

如果m_attr.GetValue()返回一个CString,则:

为什么下面的代码工作时没有错误消息。。。是否仅显示警告消息“C4927”

std::string sigCncDialog::GetSignalAttributeValue()
{return m_attr.GetValue();}
正确的答案当然是:

std::string sigCncDialog::GetSignalAttributeValue()
{return m_attr.GetValue().GetString();}
因为两个邪恶:

  • CString
    具有允许隐式转换为C样式字符指针的
  • 编译器显然允许隐式转换序列包含两个用户定义的转换,
    CString->const char*->std::string
    ,仅使用您提到的转换,即使标准C禁止这样的转换++