- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在C++ Primer一书中,有一个关于函数模板重载的例子:
// print any type we don't otherwise handle
template <typename T> string debug_rep(const T &t)
{
cout << "debug_rep(T const&)\n";
ostringstream ret; // see § 8.3 (p. 321)
ret << t; // uses T's output operator to print a representation of t
return ret.str(); // return a copy of the string to which ret is bound
}
// print pointers as their pointer value, followed by the object to which the pointer points
// NB: this function will not work properly with char*; see § 16.3 (p. 698)
template <typename T> string debug_rep(T *p)
{
std::cout << "debug_rep(T*)\n";
ostringstream ret;
ret << "pointer: " << p << '\n'; // print the pointer's own value
if (p)
ret << " " << debug_rep(*p); // print the value to which p points
else
ret << " null pointer"; // or indicate that the p is null
return ret.str(); // return a copy of the string to which ret is bound
}If we call debug_rep with a pointer:
cout << debug_rep(&s) << endl;
both functions generate viable instantiations:
debug_rep(const string* &)
, which is the instantiation of the first version of debug_rep withT
bound tostring*
debug_rep(string*)
, which is the instantiation of the second version ofdebug_rep
withT
bound tostring*
The instantiation of the second version of
debug_rep
is an exact match for this call.The instantiation of the first version requires a conversion of the plain pointer to a pointer to
const
. Normal function matching says we should prefer the second template, and indeed that is the one that is run.
const
虽然没有转换,但总是选择第二个版本:
string const s("hi"); // const
cout << debug_rep(&s) << '\n';
所以我认为这是书中的一个错误,我认为因为版本采用指针是首选,因为我们传递的指针是
const
与否(
T
将被推导出为
std::string const*
或
std::string*
)。
最佳答案
书错了。
在第一个示例中,生成的实例化不是 debug_rep(const string* &)
,是debug_rep(string* const&)
.即,const
限定指针,而不是指向的东西。 (如果本书使用了正确的 const,这会更明显;也就是说,template <typename T> string debug_rep(T const& t)
作为第一个函数模板。)
确实,T
和 T const&
与函数模板重载具有相同的优先级;在它们形成重载集的地方,它将是模棱两可的。原因T*
被选中 T const&
是它更专业;简单地说,任意T*
可以传递给采用 T const&
的函数, 而任意 T const&
不能传递给采用 T*
的函数.
关于C++ 入门第 5 版。函数模板重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65242593/
我似乎对 git 存储库有权限问题。 当我 pull 入一个不是我的 Linux 用户创建的目录时,我出现了这个错误。 fatal: Unable to create '/home/---/.git/
在 Git 中,您可以将给定目录克隆到给定目录: git clone ssh://gitolite@dev.bipper.com:3687/com/bipper/kids/portal 当我运行我们
目前,如果您在分支 V2 中并执行“git pull origin V3”,它会将 V3 merge 到 V2,甚至不会发出警告或提示。这个选项可以以某种方式被阻止吗?我在这里阅读了所有类似的问题,人
我刚开始使用 Oracle 的 Coherence 缓存,我注意到这一点:如果我在缓存中放入一个 ConcurrentHashMap 对象,当我检索它时,我可以看到它被转换为一个普通的 HashMap
看起来我缺少对 git pull 和 git commit 的基本理解,假设我在分支上工作,而它在我更新时被其他开发人员更新了在本地做我的工作。我应该在发出 git pull 之前提交更改,还是应该执
好的。所以我以为我已经舔过了……但现在…… 我有一个项目,其中包含一个来自 GitHub 的小型库作为子模块。在该 super 项目的原始版本中,子模块按预期工作。 但是,我只是克隆了 super 项
使用 Visual Studio Code 中的内置 Git,我看不到将指定的远程分支 pull 入当前分支的方法。我可以这样做吗? 示例:我正在分支 myBranch 上工作,更改已 merge 到
当我尝试提交或 pull 此错误时 Bus error (core dumped) 发生了! 当我用 gdb 调试它时,(gdb git,run commit -a,where) 结果是: mucul
我对默认 Rails Rake 任务的预期用途有点困惑,想咨询一下我是否应该使用 db:reset或编写自定义 Rake 任务。没什么聪明的,只是日常管理,而且我很可能会错过一个明显的文档,因为我是
所以我做了: git reset --hard #commithash # make a bunch of changes, fixes and so on. git add -A git commi
我已使用以下命令成功部署到 firebase 托管应用: firebase init firebase deploy 在这个阶段,我正在执行 git pull 以将 repo 下 pull 到暂存服务
当尝试在 Eclipse 的 git 存储库中 pull (团队|从上下文菜单中 pull )时,出现 Could not get advertised Ref for branch refs/hea
我是一名优秀的程序员,十分优秀!