This question already has answers here:
Why is (18446744073709551615 == -1) true?
                                
                                    (4个答案)
                                
                        
                                2年前关闭。
            
                    
在构造函数中:

CSVBMFBlockModelReader(const wchar_t * const FileNameWithPath, char Delimiter)
{
    _FileNameWithPath = FileNameWithPath;
    _Delimiter = Delimiter;
}


然后,Intellisense报告
{npos = 18446744073709551615}
并且立即窗口报告类似的内容:

{npos = 18446744073709551615}
    (错误):0
    (错误):0

我是在做错什么,还是仅仅是智能感知?该代码按预期工作,并且_FileNameWithPath.data()返回正确的结果。编译器不会发出任何警告。本地私人声明为:

private:

    std::wstring _FileNameWithPath;
    char _Delimiter;


我必须声明从c#启动代码后,我正在调试代码。我正在使用VS 2015 Enterprise。

请注意,我知道0XFFFFFFFFFFFFFFFFFF是相同的值。我的兴趣在于为何intellisense向我显示此价值。

最佳答案

您只是看到std::string / std::wstring的一部分。 std::string::npos是一个标记值,用于指示成员函数何时在字符串中找不到有效位置。定义为

size_type npos = -1;


并且由于size_type是无符号整数类型,因此它环绕起来是该类型可以容纳的最大数字。在这种情况下,您将看到一个64位无符号整数可以容纳的最大值。

09-06 19:53