我已经用C++编程了几年,我已经使用了很多STL并且已经创建了我自己的模板类几次以了解它是如何完成的.
现在我正在尝试将模板更深入地集成到我的OO设计中,一个唠叨的想法不断回到我身边:它们只是一个宏,真的......你可以使用#defines实现(而不是UGLY)auto_ptrs,如果你真的想要.
这种思考模板的方式有助于我理解我的代码将如何实际工作,但我觉得我必须以某种方式忽略这一点.宏是邪恶的化身,但"模板元编程"风靡一时.
那么,真正的区别是什么?模板如何避免#define引导你进入的危险,比如
我是C的新手,我遇到了:
#include <stdio.h>
#include <inttypes.h>
int main(void)
{
uint64_t foo = 10;
printf("foo is equal to %" PRIu64 "!\n", foo);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理!我不明白为什么?有人可以帮我这个吗?非常感谢!托
Swift目前是否支持宏,还是未来计划增加支持?目前我散布:
Log.trace(nil, function: __FUNCTION__, file: __FILE__, line: __LINE__)
Run Code Online (Sandbox Code Playgroud)
在我的代码中的各个地方.
我应该在哪里使用宏,哪里更喜欢constexpr?它们基本不一样吗?
#define MAX_HEIGHT 720
Run Code Online (Sandbox Code Playgroud)
VS
constexpr unsigned int max_height = 720;
Run Code Online (Sandbox Code Playgroud) 我想知道我们是否可以在C/C++中使用递归宏?如果是,请提供示例.
第二件事:为什么我无法执行以下代码?我在做什么错?是因为递归宏吗?
# define pr(n) ((n==1)? 1 : pr(n-1))
void main ()
{
int a=5;
cout<<"result: "<< pr(5) <<endl;
getch();
}
Run Code Online (Sandbox Code Playgroud) 我正在探索Qt源代码并遇到了这个Q_D
宏.有人可以解释它的作用吗?
几乎所有时候它都应该返回作为d
变量参数给出的类型的小部件.需要进一步澄清这一点.
经常教授的标准数组大小的宏是
#define ARRAYSIZE(arr) (sizeof(arr) / sizeof(arr[0]))
Run Code Online (Sandbox Code Playgroud)
或一些等效的形成.然而,当传入指针时,这种事情会默默地成功,并且在运行时看起来似乎有道理,直到事情神秘地分崩离析.
犯这个错误太容易了:一个具有局部数组变量的函数被重构,将一些数组操作移动到一个以数组作为参数调用的新函数中.
所以,问题是:是否有一个"卫生"宏来检测ARRAYSIZE
C中宏的滥用,最好是在编译时?在C++中,我们只使用专门用于数组参数的模板; 在C中,似乎我们需要一些方法来区分数组和指针.(例如,如果我想拒绝数组,我只是(arr=arr, ...)
因为数组赋值是非法的).
在第一次学习C#时,我很惊讶他们不支持与C/C++相同容量的宏.我意识到#define关键字存在于C#中,但与我在C/C++中的喜爱相比,它非常缺乏.有谁知道为什么C#中缺少真正的宏?
如果这个问题已经以某种形式提出,我很抱歉 - 我保证在发布前花了5分钟时间寻找重复的问题.
如何在Jinja2参数列表声明中添加注释?
我尝试的所有内容都会出错: jinja2.exceptions.TemplateSyntaxError:unexpected char u'#'
{{ Switch('var',
[('1', 'foo'), # comment 1
('2', 'bar'), ## comment 2
('3', 'rum'), {# comment 3 #}
]) }}
{% macro Switch(var, caselist) %}
{% for case, action in caselist%}
CMP {{var}} {{case}}
JNE {{LABEL}}
{{action}}
JMP {{LABELF}}
{{LABEL}}: NOP
{%- endfor %}
{{LABELF}}: NOP
{%- endmacro -%}
Run Code Online (Sandbox Code Playgroud) 我正在使用像C++这样的C++阅读它
#define max(a,b) (a > b ? a : b)
Run Code Online (Sandbox Code Playgroud)
可以导致"双重评估".有人能给我一个例子,说明何时进行双重评估以及为什么它会变坏?
PS:令人惊讶的是,除了在Clojure中的一个例子(我无法理解)之外,我在google搜索时找不到任何详细的解释.