簡體   English   中英

將std :: string :: length轉換為int

[英]Converting std::string::length to int

string :: length的返回類型為size_t,但似乎可以將其放入int中,而無需進行任何強制類型轉換。 在這種情況下,為什么要為int分配一個size_t?

int main() {
     string line;
     getline(cin, line);
     cout << line << endl;
     int i = line.size();
     int j = line.length();
     cout << i << " " << j << endl;
}

size_t值正在縮小。 在c ++ 11中,您可以通過執行以下操作使此失敗並出現錯誤:

#include <string>

int main() {
    std::string line;
    int i{line.size()};
    int j{line.length()};
}

產生的錯誤如下所示:

gh.cc:5:11: error: non-constant-expression cannot be narrowed from type 'size_type' (aka 'unsigned long') to 'int' in initializer list [-Wc++11-narrowing]
    int i{line.size()};
          ^~~~~~~~~~~
gh.cc:5:11: note: override this message by inserting an explicit cast
    int i{line.size()};
          ^~~~~~~~~~~
          static_cast<int>( )
gh.cc:6:11: error: non-constant-expression cannot be narrowed from type 'size_type' (aka 'unsigned long') to 'int' in initializer list [-Wc++11-narrowing]
    int j{line.length()};
          ^~~~~~~~~~~~~
gh.cc:6:11: note: override this message by inserting an explicit cast
    int j{line.length()};
          ^~~~~~~~~~~~~
          static_cast<int>( )

size_t是32位整數。 轉到編譯器目錄並打開stdio.h文件。

有一個聲明,像這樣:

typedef unsigned int size_t;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM