C++ 11 standardına göre, aşağıdaki program iyi biçimlendirilmiş ve taşınabilir C++? saf taşınabilir CInt main (int, char const * const *) iyi biçimlendirilmiş mi?
int main(int argc, char const* const* argv) {}
C++ 11 standardına göre, aşağıdaki program iyi biçimlendirilmiş ve taşınabilir C++? saf taşınabilir CInt main (int, char const * const *) iyi biçimlendirilmiş mi?
int main(int argc, char const* const* argv) {}
sayılı ++ programı, argv
bağımsız değişken, mevcut olduğu takdirde, herhangi bir const
değiştiriciler sahiptir.
Düzenleme: bak Bölüm (versiyonunda karşımda var) C++ 11 taslak standardının 3.6.1.2 devletler:
bir uygulama ana fonksiyonu önceden tanımlamayı etmeyecektir. Bu işlev aşırı yüklenmeyecektir. Tip int türünde bir dönüş türüne sahip olmalıdır, ancak aksi takdirde türü uygulama tanımlıdır. Tüm uygulamalar ana aşağıdaki tanımların her ikisine de izin zorundadır:
int main(){ /*...*/ }
ve
int main(int argc, char* argv[]) { /* ... */ }
int(int,char const*const*)
imzasının, izin verilen zorunlu imzalardan (
int()
ve
int(int,char**)
) farklı olduğu gerekçesiyle reddedebilir. (Kötü bir uygulama görünüşte
auto main(int argc,char* argv[]) -> int
veya aslında'un
{ /* ... */ }
numaralı
reddetme biçimini reddedebilir. Ancak bu normal değildir. Bir const ekleyerek bir sorun neden main
çağrı neden olur ve C++ 11 'benzer' türler hakkında bit eklediğinden bir nesnesine char const * const *
aracılığıyla erişirken katı takma kuralı ihlal etmeyeceksiniz değişken.
Uygun bir uygulama teknik olarak bunu reddederken, kullanmayı düşünebileceğiniz herhangi bir uygulamaya taşınabilir olacağını düşünüyorum.
Hukuki takma adlara benzer türler eklemenin, sağlanan argümanları ve biçimsel parametreleri yanlış eşleştirilen işlevleri olan işlevleri etkinleştirmeyi amaçladığını anlamamıştım ;-) Ama evet, muhtemelen yalnızca çalışır (TM). –
@SteveJessop Bu özelliği etkinleştirmek amaçlanmamıştır ve aslında genel olarak bunu etkinleştirmez, çünkü 'const'i bir resmi parametreye eklemek ad manganlığını etkiler. Bunun “ana” için çalışmasının sebebi, çünkü “ana” nin genellikle manevra yapmaktan muaf tutulmasıdır (çünkü ana yola aşırı yükleme yapmanıza izin verilmez). Benzer türlerin eklenmesi, yalnızca 'char const' * char const * const * 'seçeneğine eriştiğinizde, katı takma kuralını ihlal ettiği için otomatik olarak tanımlanmamış davranışları otomatik olarak almadığınız anlamına gelir. Bildiğim tüm uygulamalarda C++ 11'den önce iyi çalıştı, ama teknik olarak UB idi. Şimdi UB – bames53
olmamalıdır. Otomatik ana (int argc, char * argv []) -> int 'farklı bir imza olmak için kaynak veya standart bir alıntı yapmak ister misiniz? Int main (int argc, char ** argv) 'de farklı bir imza değil mi? –