【发布时间】:2013-06-13 06:50:54
【问题描述】:
假设我不喜欢 static_cast 运算符的名称,并且想将其包装在一个具有不同名称的函数中,例如 fancy_static_cast,但完美地保留了语义。我该怎么做?更具体地说,static_cast 是否通过值或引用接受它的参数?还是取决于参数表达式?我应该提供几个重载还是像这样的东西可以解决问题?
template <typename To, typename From>
To fancy_static_cast(From&& from)
{
return static_cast<To>(std::forward<From>(from));
}
【问题讨论】:
-
static_cast不是一个函数,它是一个特殊的编译器关键字,在编译时完全由编译器处理。 -
@JoachimPileborg 我从来没有说过它是一个函数,也不是一个编译器指令。
static_cast是一个操作员。但这到底有多重要? -
@yurikilochek 运算符没有函数语义——它们不接受“按值”或“按引用”的参数。它们是根据左值和右值定义的,并且可以很好地包含诸如“如果它是一个特定的左值,那么……,否则将其视为右值……”之类的逻辑
标签: c++ argument-passing static-cast perfect-forwarding