以下C ++代码在Visual Studio中编译:
void main() {
int f() = 5;
std::cout << typeid(f()).name(); // int
}
并且,只要我能看到,它在Linux中不能与gcc或g ++一起使用(我尝试在运行Ubuntu的虚拟机和运行Mint的物理虚拟机上编译它,两者都包含日期更新)
但是,变量f()不能在任何地方使用。以下代码:
void main() {
int f() = 5;
cout << f();
}
给出了这个错误:
error LNK2019: unresolved external symbol "int __cdecl f(void)" (?f@@YAHXZ) referenced in function _main
error LNK1120: 1 unresolved externals
我想知道的是它的工作原理,f()是什么,如果这是一个有效的命名,它是如何使用的。
它适用于Visual Studio 2013和Visual C ++ 2010。
似乎调试器不将f()识别为变量(正如预期的那样); 此外,证明它的工作原理:D在VS2013下。
答案 0 :(得分:3)
int f() = 5;
你偶然发现了“最令人烦恼的解析”。 编译器从中得到的(也是根据你得到的链接器错误)是一个函数声明/指针。可以解析为函数声明的所有内容都将是。 此代码声明了一个名为f的函数,该函数不带参数并返回int。我的猜测是Visual Studio假定此函数现在位于内存地址5。
你可能想要的是使用f作为变量,所以省略括号:
int f = 5;
答案 1 :(得分:0)
int f() = 5;
是无效的语法。
我认为你想要这样的东西。
int f() { return 5; }
int main()
{
std::cout << f();
}
答案 2 :(得分:0)
那是因为
int f() = 5;
不是变量。要在C ++中声明整数变量,不能包含括号。因此,正确的代码将是
int f = 5;
所以总的完整代码是
void main()
{
int f = 5;
cout << f;
}
一般而言 void main() 不再使用,它是
int main()
{
int f = 5;
cout << f;
return 0;
}
代替。这取决于你的编译器的年龄,但这通常是现在可以接受的做法。