GCC 4 vs ile ifstream üzerinde Karşılaştırma "daha az": Bu derler ve GCC 4.9.3 ile ancak GCC 6.1.1 bu hata üzerinde iyi çalışırSadece bu kod parçasının üzerinde tökezledi 6
std::string export_str = "/path/to/file";
std::ofstream export(export_str.c_str());
if (export < 0) {
std::cout << "Unable to export" << std::endl;
return -1;
}
olarak gelir:
-std=c++98
(derleme etmez)
-std=c++03
(derleme etmez)
: birlikte GCC 6 denedik
error: no match for ‘operator<’ (operand types are ‘std::ofstream {aka std::basic_ofstream<char>}’ and ‘int’)
if (export < 0) {
~~~~~~~~~~~^~~
Düzenleme (değil derleme etmez): Ancak GCC 4'te hala -std=c++11
ile derler. Bu spesifik gerçek, aşağıdaki cevapta da açıklanmıştır. Bu nedenle, standartta bir değişiklik olduğunu tahmin ediyorum.
std::string export_str = "/path/to/file";
std::ofstream export(export_str.c_str());
if (export.fail()) { // <-- related change
std::cout << "Unable to export" << std::endl;
return -1;
}
.
Bu yüzden sorum, değil "ofstream'in geçerliliğini nasıl denetlerim" . Zaten biraz daha fazla veya daha az tatmin edici cevaplar var ("daha fazla veya daha az" çünkü sorun biraz karmaşık görünüyor).
Here veya here veya here.
Sorum yukarıdaki kodda (export < 0)
gibi şeyler derleme konusunda GCC 4 ve GCC 6 arasında yapılan değişiklik için bir açıklama olduğunu.
Herhangi bir işaretçi için teşekkür ederiz.
'ihracat <0' demek? – juanchopanza
aptal kişi 'yazdıysam (ihracat <0)' yerine C-imsi '(ihracat)' yapı eğer - sadece, aynı zamanda daha uzun Karartılmış değil; onlar bunu neden, muhtemelen – vaxquis
ben stronly ihracat adında bir değişken oluşturmak için değil teşvik etsin ... asla bilemeyeceğim. C++ 11'de kullanılmaz, ancak hala saklıdır. –