Мое понимание объявлений функций всегда заключалось в том, что параметры значений по умолчанию объявляются после параметров, не являющихся значениями по умолчанию.
Но я только что заметил, что могу ввести объявление функции, которое нарушает это правило:
typedef // type of "int my_function ( int=1 , int )"
int // return type
( t_func_ptr ) // function type name
( int = 1 // arg0, default value - declared before non-default
, int // arg1
) ;
/*
// this wont compile, so why be able to typedef it?
int my_bad_function ( int=1 , int )
{
} ;
*/
Мне любопытно узнать, почему typedef возможен?
РЕДАКТИРОВАТЬ: я скомпилировал с рядом компиляторов (я использую кросс-целевую IDE), не уверен в версиях базового компилятора, нужно проверить, но цели предназначены для окон (mingw), linux ubuntu, avr, arduino (atmega , due, uno), raspberrypi, микрочип (чипкит) и т. д. — Майкл Коллиер 2 часа назад
i686-w64-mingw32-g++ (GCC) 4.8.2
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
avr-g++ (GCC) 4.8.1
arm-none-eabi-g++ (GNU Tools for ARM Embedded Processors) 4.8.3 20140228 (release) [ARM/embedded-4_8-branch revision 208322]
pic32-g++ (chipKIT) 4.5.1 chipKIT Compiler for PIC32 MCUs v1.31-20120614
arm-none-eabi-g++ (GNU Tools for ARM Embedded Processors) 4.7.4 20130913 (release) [ARM/embedded-4_7-branch revision 202601]
msp430-g++ (MSPGCC 20120406 (With patches: sf3540953 sf3559978))
4.6.3 20120301 (mspgcc LTS 20120406 unpatched)
arm-linux-gnueabihf-g++ (crosstool-NG 1.17.0) 4.7.2
before
и неlater
, не логично делать. Будь то в простой функцииint f( int=0, int ) or
typedef` или в функцииtemplate
. - person Shakiba Moshiri   schedule 02.09.2016