爲隱式轉換獲取使用自動錯誤。當與自動一起使用時出現錯誤窄轉換
使用int變量捕獲返回的v.size()
可以,但自動投訴。 編譯器錯誤,不告知這是因爲縮小轉換的。但我想在內存方面要了解這是如何發生以及爲什麼汽車是不是允許它這樣做,而正常轉換是因爲以下行確定
#include <iostream>
#include <vector>
int main()
{
auto v = std::vector<int>{ 1, 2, 3 };
auto c = 'h';
auto n2 = int{c};
std::cout<<n2<<" "<<c;
auto size = int{v.size()};
std::cout<<size;
int size_1 = v.size();
std::cout<<size_1;
}
錯誤 auto size = int {v.size()};
main.cpp: In function 'int main()': main.cpp:11:27: error: narrowing conversion of 'v.std::vector::size()' from 'std::vector::size_type {aka long unsigned int}' to 'int' inside { } [-Wnarrowing]
當該行被註釋掉它完美
#include <iostream>
#include <vector>
int main()
{
auto v = std::vector<int>{ 1, 2, 3 };
auto c = 'h';
auto n2 = int{c};
std::cout<<n2<<" "<<c;
//auto size = int{v.size()};
//std::cout<<size;
int size_1 = v.size();
std::cout<<size_1;
}
輸出
104 h3
有什麼難以理解的?你正在將'long unsigned int'轉換爲'int' - 可能會截斷它。這很糟*你應該很高興你的友好編譯器警告你。 –
「使用int變量捕獲v.size()的返回是可以的」 - 不,它是* not *。 'size()'不*返回'int'。有轉換髮生,結果可能不是你所期望的。加強的初始化(和編譯器警告)可以讓你避免在這裏犯錯。 –