Aşağıdaki kod GCC ile temiz bir şekilde derler:Yenisini bildirmek için önceki işlev parametresini kullanmak yasal mıdır?
void func(int arg1, decltype(arg1) arg2)
{
(void)arg2;
}
int main(){}
ben derlemek için bu komutu kullanılır:
g++ -std=c++14 test.cpp -o test -pedantic-errors -Wall -Wextra
Ama işlev bildiriminde ortasında bir parametrenin böyle kullanım garip görünüyor. Aslında standart C++ 'da geçerli mi, yoksa GCC uzantısı mı? Biz N3979 bakarsanız
Ben arg1' 'tipi çok daha karmaşık gerçek kodda olduğunu varsayalım? Spesifikasyona ya da herhangi bir referansa bakmadan, ama ayrıştırma hakkında biraz bilgi sahibi olursam, sanırım tamamdır, çünkü C++ gibi dilleri ayrıştırmak çoktan soldan sağa bir ilişkidir. Derleyici 'arg2' için bildirimi ayrıştırdığında, zaten 'arg1' bildirimini çözümlemiş olmalı, bu nedenle arg1 türünü kesinlikle bilmelidir. Eğer gerçekten "izinli" ise, bilmiyorum, ikisi de ters yönde çalışacaksa ('arg1' için 'decltype (arg2)' yi kullanarak). –
@JoachimPileborg elbette, gerçek kod 'arg1' için çok daha karmaşık bir türe sahiptir, aksi takdirde üzerinde 'decltype' kullanmayı denemeyi düşünürdüm. – Ruslan
FWIW, MSVC++ 2013 ve onun Intellisense (EDG) her ikisi de bunu kabul eder. – MSalters