社区
工具平台和程序库
帖子详情
new 问题
todd0
2003-06-30 01:31:01
new (char*)[10]
和
new char*[10]
有什么区别?
另外哪位有`C++ TEMPLATE : THE COMPLETE GUIDE', 多多感谢。
...全文
18
5
打赏
收藏
new 问题
new (char*)[10] 和 new char*[10] 有什么区别? 另外哪位有`C++ TEMPLATE : THE COMPLETE GUIDE', 多多感谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xueweizhong
2003-07-01
打赏
举报
回复
是关于
new new-type-id
和
new (type-id)
的语法问题。
todd0的说法是正确的。
短歌如风
2003-06-30
打赏
举报
回复
我的理解:
这是一个操作符优先级的问题:
char * [10]:由于[]操作符(Postfix Operator)比*(Unary Operator)操作符优先级高,所以这是一个“数组”,它的元素是“指针”,指针指向“字符”
(char *)[10]:由于强制优先级(括号)最高,所以这是一个指针,指向一个数组,数组元素是指针(我本来认为应该用char(*)[]表示,可是通不过)。
从而可以看出,new char * [10]分配了一个指针数组(调用operator new []),new (char*)[10]分配了一个指向数组的指针(调用operator new)
不过实际情况并不是这样的:
在BCB6中:
#include <iostream>
namespace mynew
{
void * operator new (unsigned int Size)
{
std::cout << "new:" << Size << std::endl;
return ::operator new (Size);
}
void * operator new [](unsigned int Size)
{
std::cout << "new[]:" << Size << std::endl;
return ::operator new (Size);
}
}
#define TRACK(X) std::cout<<"******** " << #X << " ************" << std::endl; X
typedef char * PChar;
main()
{
TRACK(mynew::new char*[10]);
TRACK(mynew::new (char*)[10]);
std::cin.get();
}
输出结果为:
******** mynew::new char*[10] ************
new[]:40
******** mynew::new (char*)[10] ************
new:4
和我推测的一样。
而在Dev C++ 4.9.8.0中(由于不支持mynew::new这样的语法,对源代码有所修改):
#include <iostream>
#define TRACK(X) std::cout<<"******** " << #X << " ************" << std::endl; X
namespace mynew
{
void * operator new (unsigned int Size)
{
std::cout << "new:" << Size << std::endl;
return ::operator new (Size);
}
void * operator new [](unsigned int Size)
{
std::cout << "new[]:" << Size << std::endl;
return ::operator new (Size);
}
void test ()
{
TRACK(new char*[10]);
TRACK(new (char*)[10]);
}
}
typedef char * PChar;
main()
{
mynew::test();
std::cin.get();
}
输出结果为:
******** new char*[10] ************
new[]:40
******** new (char*)[10] ************
new[]:40
两种情况竟然一样!
而在VC6中,根本不支持new (char*)[10]这样的语法。
结论是最好不要用这样复杂的new表达式,应该用typedef为复杂类型定义类型标识符,然后在去new。
todd0
2003-06-30
打赏
举报
回复
Yssss1980(浪子雪影): 有没有上面那本书啊?
这两个应该是不一样的
new (char*)[10] -> (new (char*))[10]
new char*[10] -> new (char*[10])
语法上通过,含义不一样。可以去看一下STROUSTRUP书后附录A的语法描述。
我想要书,有书就给分。
Yssss1980
2003-06-30
打赏
举报
回复
DEV C++中都可以编译通过
本质上没有区别
谢谢
Yssss1980
2003-06-30
打赏
举报
回复
前者在VC6编译不通过
而后者可以通过
谢谢
rac数据库存储在线迁移和磁盘冗余模式修
数据库参数文件从data迁移到data
new
3.数据库控制文件从data迁移到data
new
4.迁移数据库文件从data到data
new
5.迁移redo文件从data到data
new
6.临时文件的迁移...
SpringBoot事务-REQUIRES_
NEW
事务属性陷阱
REQUIRES_
NEW
事务属性陷阱 不管是使用 Spring Framework,还是使用 EJB,使用 REQUIRES_
NEW
事务属性都会得到不好的结果并导致数据损坏和不一致。REQUIRES_
NEW
事务属性总是会在启动方法时启动一个新的事务。...
【C++】创建对象之
new
关键字
起初刚学C++时,很不习惯用
new
,后来看老外的程序,发现几乎都是使用
new
,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用
new
的确会带来很多
问题
。当然这都是跟
new
的用法有关的。
new
创建类对象,使用...
深入解析
new
、operator
new
、::
new
、placement
new
1.
new
分为两步 a、内存分配 调用相应的operator
new
( )分配内存 b、构造函数 调用相应的构造函数 实验代码: 1. class T{ 2. public: 3. T(){ 4. cout &amp;lt;&amp;lt; &...
linux
new
date差8个小时,
new
date() 在Linux下引起的时间差
问题
java工程部署到Linux时,使用
new
date()获取的时间出现时间差,通过查阅资料,发现有可能是服务器时间设置
问题
,JVM
问题
,jdk
问题
;1.服务器时间设置
问题
:正确的时间显示 有 CST,表明服务器时间设置是没
问题
的,命令...
工具平台和程序库
24,854
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章