轻松了。放点分,随便来吵一下架,刺激一下。

earthharp 2003-01-13 06:02:18
你是否认为C++中如下的初始化语法具有二义性:

class Base
{};

int main()
{
Base base = Base();
}
:D
...全文
43 65 打赏 收藏 转发到动态 举报
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
earthharp 2003-01-16
  • 打赏
  • 举报
回复
结帖。
T x = T();
因为这样的初始化语法对于任何能使用T()初始化的类型都是适用的。包括内建类型。

Base base = Base();
这样的语句,若class Base提供的copy ctor为Base(Base &)而能编译通过,则应视为错误。因为临时对象为Rvalue.


dindon 2003-01-15
  • 打赏
  • 举报
回复
可以显式的调用构造函数吗?
或者楼主的问题有别的解释?
谁告诉我!!
hoo000 2003-01-15
  • 打赏
  • 举报
回复
AC_TRYSTART
_feSocket.Initialize (socketPath, userID, programID,& (_indCancelDataControl->GetShmAccess()) );
AC_TRYEND (exc,
errCode = INIT_SOCKET_ERR;
return ACFalse);

AC_TRYSTART
_feSocket.Request ((AFEUpdateInfo*)this);
AC_TRYEND (exc,
errCode = INIT_SOCKET_ERR;
return ACFalse);
Zark 2003-01-15
  • 打赏
  • 举报
回复
不懂楼主的"二义"指的是什么?什么和什么"二义"了.因为在这版上挣分太难,所以入乡随俗,也来凑一脚.

仅就其代码来说,是没有"错误"的,不知这是不是"二义"的范畴.就我个人的理解, Base base=Base(); 是这样工作的,先在栈上开辟一块大小为sizeof(Base)的内存区,base的地址就是这块内存起始点,然后调用Base类中的缺省构造函数生成一个临时对象,再调用Base类的拷贝构造函数对base为起点的内存各字节进行赋值.

liushmh 2003-01-15
  • 打赏
  • 举报
回复
我也来凑热闹:)
class Base
{};
一般来说,由于Base没有派生于别的类,也没有成员需要初始化,这样ctor
和copy ctor, operator =()应该都是trivial的,
c++编译器不会生成这些函数。






franky1 2003-01-15
  • 打赏
  • 举报
回复
http://www.smiling.com.cn/search/groupinfo.ecgi?group_id=39097&gname=gafield
loujing 2003-01-15
  • 打赏
  • 举报
回复
cjz103 2003-01-15
  • 打赏
  • 举报
回复
up!!
JoshuaLi 2003-01-15
  • 打赏
  • 举报
回复
对Zark(金陵五月)表示五体投地
magicblue 2003-01-15
  • 打赏
  • 举报
回复
Zark(金陵五月)说出了问题真正的地方。楼主所谓的“二义”似乎比较含糊。一般所说的二义指编译器不能在两个决议之间做出选择。但楼主在这里用二义来指左右值赋值问题,好象大家有些误解。如果指一般的二义,文件中定义了一个函数Base()且返回Base类型对象。Base base = Base();就是有二义性的。这在我上面的回帖中也说明了。如果指左右值,我们大可不必来趟这浑水,除非你是C++委员会委员.这些问题与C++如何实现有关,怎么实现是厂商的事情,厂商不喜欢教条主义。要么你也可以从哲学角度来想想为什么有时候所谓的临时对象可以被改变,有的时候为什么又不能(你能改变函数参数传递时生成的临时对象吗?),另外,最重要的是:临时对象是左值还是右值是不是一个问题?
另外据我所知STL中用T parameter_of_function = T();这种初始化来避免不必要的copy-ctor开销。至于楼主所说“在不能确定模板类型T的情况下,这是相当有利的。”并不知晓,还望楼主答复一下。
_炳叔_ 2003-01-15
  • 打赏
  • 举报
回复
我也觉得没有什么问题
lizhiwo_wo 2003-01-15
  • 打赏
  • 举报
回复
come on,come on
runorstop 2003-01-15
  • 打赏
  • 举报
回复
光是这两个东东应该是没二意的。
franky1 2003-01-15
  • 打赏
  • 举报
回复
come on
robbinwoo 2003-01-15
  • 打赏
  • 举报
回复
因为我也是菜鸟,所以我认为“Bandry(菜鸟-舍我其谁)”的说法是对的.
neubird 2003-01-15
  • 打赏
  • 举报
回复
up
Bandry 2003-01-15
  • 打赏
  • 举报
回复
在这儿应该没有,编译器会有一个默认的构造函数
zhihaitao 2003-01-15
  • 打赏
  • 举报
回复
不用这样引大家迷茫吧!!:<
earthharp 2003-01-14
  • 打赏
  • 举报
回复
嘿嘿
up一下,还有很多分呢
JoshuaLi 2003-01-14
  • 打赏
  • 举报
回复
int main()
{
int i1 = int(); // 《C++ primer》
int i2 = i2;
int i3 = i3 = 0;

return 0;
}
加载更多回复(45)

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧