2 ali88z ali88z 于 2016.01.19 11:41 提问

在C++中,int();这么一行代码表达什么意思?
c++

无意中发现的问题,简化了一下,以下代码C++是可以编译运行的,没发现有任何作用。stopStreamCBFun是数据类型,代码中当成函数运行竟然也能正常工作。我又加了一行int();也可以编译运行,当然实际上不管加几行这种代码,用gdb运行b main后总是会跳过这些代码,直接跳到下一行return 0; 也就是说这些代码其实是无效的,这个问题本身没什么用,我只是好奇为什么这样的代码编译能通过,类似的代码在C里面是会提示出错的。欢迎大家讨论。

#include
using namespace std;

typedef int (*stopStreamCBFun)();

int main()
{
stopStreamCBFun();
int();
return 0;
}

6个回答

qq_27183003
qq_27183003   Ds   Rxr 2016.01.19 12:59

在C++中int(a)是将a装换为int型,int()应该是没什么用,是不是就起到一个占位作用,以后要完善。

NetDomainer
NetDomainer   2016.01.19 11:48

根据我的理解,C++中是支持创建对象的,此处就相当于使用Int()创建了一个基本的整型对象Int,然而并没有为其命名,没有其变量名也就无法操作这里的内存。
于是,此处的开辟内存便丢失了,这行代码尽管是合法的,但是没有实际意义,而在C中,是没有对象概念的,C中只有函数,表达式,C编译器此时认为Int()是一个函数,而此处并没有定义以及声明相关的Int()函数,所以就会报错了。这就是我的理解,事实可能并不是这样,还望大家指正。

rl529014
rl529014   2016.01.19 12:20

真有人写这么奇怪的代码啊

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.01.19 13:08

INT(number)Number 需要进行向下舍入取整的实数。int()为取整函数。

John_ToStr
John_ToStr   Rxr 2016.01.20 14:00

int(); 编译器会认为他是一个int类型的未初始化的无名对象,因为c++中一切皆对象嘛。比如说A是一个类, 那么 A(); 则代表一个A类型的无名对象,
你创建对象不用他,编译器怎么会报错呢?

qq_28768929
qq_28768929   2016.01.30 02:29
C我没研究过,不过在C++里面我的理解是,类名()形式的语句是调用构造函数创建一个新的对象,虽然我们写构造函数的时候并没有写过返回值,但是我觉得它是有返回值得他返回创建出来的对象,只不过返回的过程被底层代管了,所以我们有时候会写这样的语句: CTest lctest = CTest();想像一下普通的函数调用,,根据需求我们通常会忽略函数返回值,即没有声明一个变量去容纳其返回值,其形式正好与这一句类似,我觉得其中原理相同
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!