由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 师傅们,C++概念题,弟子有礼了
相关主题
问低级问题基于macro的meta programming真难懂
What syntax is this?(about macro)输入输出流,stl,api精通各需要多长时间?
如何用 preprocessor unroll for loop?深情的呼唤师傅们!C++做题做不出来啦!
Visual studio: 2008: create a macro in compiler configuration弱问:VS.net里面VC++工程的"Windows窗体应用程序"是什么类库?
C++: operator new 为啥要是 static的, 不是有啥影响?从一个Embedded C++ quiz 调查看印度人的实力
C++ template preprocessor使用asio的项目成功编译了
三个C syntax 弱问题VC++ 中的 memory leak problem
one question about operator delete问一个有关iostream的问题
相关话题的讨论汇总
话题: macro话题: template话题: expansion话题: macros
进入Programming版参与讨论
1 (共1页)
z****e
发帖数: 2024
1
Which of the following statements regarding the benefits of using template
functions over preprocessor #define macros are correct?
A. A preprocessor macro expansion cannot work when user-defined types are
passed to it as arguments.
B. Since the preprocessor does the macro expansion and not the compiler, the
build process takes a longer period of time.
C. While expanding #define macros, the preprocessor does no type checking on
the arguments to the macro.
D. A preprocessor macro expansion incurs a performance overhead at runtime.
E. It is simple to step into a template function code during the debugging
process.
多选。
k**********g
发帖数: 989
2
C and E
z****e
发帖数: 2024
3
非常赞同。
但是B,我认为前半部分的陈述也是对的。后半部分build时间长短,如何比较?

【在 k**********g 的大作中提到】
: C and E
t****t
发帖数: 6806
4
一样的, template就是带syntax check的macro.

【在 z****e 的大作中提到】
: 非常赞同。
: 但是B,我认为前半部分的陈述也是对的。后半部分build时间长短,如何比较?

z****e
发帖数: 2024
5
macro 是 preprocessor 处理的,不是编译器处理的。preprocessor应该是编译环节最
先被调用的程序。可以说,macro的代码是完全和编译器无关的。
而tempalte 是不经过preprocessor的,直接被编译器处理的,可以说,template是只
和编译器有关的。
我不知道师傅你说的所谓的“一样”,是从何谈起的。
你说的“一样”,恐怕是说进入编译器以后,编译过程,对于template和macro当然是
一样的了。那我还能说,任何代码都“一样”的,因为要经过编译器。
macro不能类型检查,不能access成员变量,只是一个文字替换,本身不被编译器处理。
这么多不同,你还来个“一样”?
那我还说 main 和 int 一样呢,都是英文。

【在 t****t 的大作中提到】
: 一样的, template就是带syntax check的macro.
t****t
发帖数: 6806
6
细节上当然有很多讲究, 比如template可以递归, 一般macro不能递归(如果用文件#
include的话, 也是可以递归的), template可以带调试信息, macro没有调试信息(
again, 如果用#include的话, 也不是完全没有), 等等.
但是本质上来说就是这样. 至于macro不能access成员变量, 那显然没有这回事. 除了
没有语法检查, 别的没什么大区别. 本质上来说, template是个语法糖, 当然这是个很
大块的糖, 大到整个STL都建立在上面的程度. 但是你看看boost就知道了, 以前
template没那么好使的时候(比如说VC6的版本), 一大堆本来应该用template做的东西
都是用macro模拟的.
至于int和main一样, 这个不好说. int是保留词, 没法一样. main和foo则区别不大.

理。

【在 z****e 的大作中提到】
: macro 是 preprocessor 处理的,不是编译器处理的。preprocessor应该是编译环节最
: 先被调用的程序。可以说,macro的代码是完全和编译器无关的。
: 而tempalte 是不经过preprocessor的,直接被编译器处理的,可以说,template是只
: 和编译器有关的。
: 我不知道师傅你说的所谓的“一样”,是从何谈起的。
: 你说的“一样”,恐怕是说进入编译器以后,编译过程,对于template和macro当然是
: 一样的了。那我还能说,任何代码都“一样”的,因为要经过编译器。
: macro不能类型检查,不能access成员变量,只是一个文字替换,本身不被编译器处理。
: 这么多不同,你还来个“一样”?
: 那我还说 main 和 int 一样呢,都是英文。

t****t
发帖数: 6806
7
另外, 我原文中说的"一样", 本来是专指build时间. 但是在我看来, 模板的本质就是
宏.

理。

【在 z****e 的大作中提到】
: macro 是 preprocessor 处理的,不是编译器处理的。preprocessor应该是编译环节最
: 先被调用的程序。可以说,macro的代码是完全和编译器无关的。
: 而tempalte 是不经过preprocessor的,直接被编译器处理的,可以说,template是只
: 和编译器有关的。
: 我不知道师傅你说的所谓的“一样”,是从何谈起的。
: 你说的“一样”,恐怕是说进入编译器以后,编译过程,对于template和macro当然是
: 一样的了。那我还能说,任何代码都“一样”的,因为要经过编译器。
: macro不能类型检查,不能access成员变量,只是一个文字替换,本身不被编译器处理。
: 这么多不同,你还来个“一样”?
: 那我还说 main 和 int 一样呢,都是英文。

z****e
发帖数: 2024
8
这个build的时间,是两个差不多,还是有一个会快?

【在 t****t 的大作中提到】
: 另外, 我原文中说的"一样", 本来是专指build时间. 但是在我看来, 模板的本质就是
: 宏.
:
: 理。

t****t
发帖数: 6806
9
数量级上不会差.

【在 z****e 的大作中提到】
: 这个build的时间,是两个差不多,还是有一个会快?
a****l
发帖数: 8211
10
这个快要看你怎么理解了.macro其实就是文本替换,所以你可能说定义了一个非常复杂
的函数或者过程写成foo(a,b,c),结果程序员就到处用foo(a,b,c),写起来非常方便,但
是实际的程序就是到处复制了替换后的foo(a,b,c),就是一段相同的程序被到处重复,这
样显然对编译的效率是不利的,对执行效率也可能会有影响.

【在 z****e 的大作中提到】
: 这个build的时间,是两个差不多,还是有一个会快?
1 (共1页)
进入Programming版参与讨论
相关主题
问一个有关iostream的问题C++: operator new 为啥要是 static的, 不是有啥影响?
Does VC++ 6.0 not support dynamic cast?C++ template preprocessor
c++标准函数传递一问三个C syntax 弱问题
C语言重复定义问题one question about operator delete
问低级问题基于macro的meta programming真难懂
What syntax is this?(about macro)输入输出流,stl,api精通各需要多长时间?
如何用 preprocessor unroll for loop?深情的呼唤师傅们!C++做题做不出来啦!
Visual studio: 2008: create a macro in compiler configuration弱问:VS.net里面VC++工程的"Windows窗体应用程序"是什么类库?
相关话题的讨论汇总
话题: macro话题: template话题: expansion话题: macros