【问题标题】:C++ wstring constructorC++ wstring 构造函数
【发布时间】:2023-03-18 06:37:02
【问题描述】:

为什么编译失败:

std::wstring timeString();
if (sysTime->wHour < 10) timeString.append(L"hi");

但是一旦我把第一行改成这样:

std::wstring timeString(L"some text");

有效吗?

【问题讨论】:

    标签: c++ wstring


    【解决方案1】:
    std::wstring timeString();
    

    这是一个函数声明,而不是对象声明。仔细看:函数名是timeString,不带参数,返回std::wstring

    只写:

    std::wstring timeString;
    

    应该够了。

    只有你更喜欢 C++11 的统一初始化语法,你才能避免这样的意外错误:

    std::wstring timeString { L"some text" };  //object!
    
    std::wstring timeString { };  //object, not function declaration!
    

    希望对您有所帮助。

    【讨论】:

    • 这行得通。但是是什么使它成为函数声明,而不是 std::wstring timeString(L"hi")?
    • @Motig:在本站搜索"vexing parse in C++",你会得到很多讨论这个的话题。
    • 谢谢纳瓦兹。 (10 个字符)
    【解决方案2】:

    替换:

    std::wstring timeString();
    

    与:

    std::wstring timeString;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-27
      • 2011-04-03
      • 2010-12-16
      • 2014-11-01
      • 2011-04-19
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多