在一个声明语句中定义一个函数和一个变量
Defining a function and a variable in one declaration statement
我很确定以下是合法的
int a, *b, c[5], d(char x);
这定义了一个整数 a
、一个指向 int 的指针 b
、一个包含 5 个整数的数组 c
,并声明了一个函数 d
接受一个 char 并返回整数
在那里提供函数的定义是否合法? (前提是我们不在函数范围内)
int a, f()
{
return 1;
}
int main()
{
cout << a << f(); //prints 01;
}
MSVC 拒绝该代码。如果这样做是对的,我想知道标准中的哪条规则允许这样的函数声明而不是定义。
我正在尝试进行 codegolf 风格的挑战,我需要在字符方面最小化我的代码,我想知道这个技巧是否是合法的 C++。
不,函数定义只有一个声明符。它在 C++11 8.4.1 和 A.7 中指定:
function-definition:
attribute-specifier-seq<opt> decl-specifier-seq<opt> declarator virt-specifier-seq<opt> function-body
int a, *b, c[5], d(char x);
有效,因为编译器知道您将不再声明任何变量。编译器知道这一点,因为语句后面有一个分号。
int a, f()
{
return 1;
}
在中是否有效,因为编译器不知道你什么时候声明变量和函数。而当你开始函数的实现时;(它认为你想将int
到return 1
之后的第一个分号的所有内容声明为变量)。
我很确定以下是合法的
int a, *b, c[5], d(char x);
这定义了一个整数 a
、一个指向 int 的指针 b
、一个包含 5 个整数的数组 c
,并声明了一个函数 d
接受一个 char 并返回整数
在那里提供函数的定义是否合法? (前提是我们不在函数范围内)
int a, f()
{
return 1;
}
int main()
{
cout << a << f(); //prints 01;
}
MSVC 拒绝该代码。如果这样做是对的,我想知道标准中的哪条规则允许这样的函数声明而不是定义。
我正在尝试进行 codegolf 风格的挑战,我需要在字符方面最小化我的代码,我想知道这个技巧是否是合法的 C++。
不,函数定义只有一个声明符。它在 C++11 8.4.1 和 A.7 中指定:
function-definition:
attribute-specifier-seq<opt> decl-specifier-seq<opt> declarator virt-specifier-seq<opt> function-body
int a, *b, c[5], d(char x);
有效,因为编译器知道您将不再声明任何变量。编译器知道这一点,因为语句后面有一个分号。
int a, f()
{
return 1;
}
在中是否有效,因为编译器不知道你什么时候声明变量和函数。而当你开始函数的实现时;(它认为你想将int
到return 1
之后的第一个分号的所有内容声明为变量)。