- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这里是相关代码的链接:
#include <iostream>
#include <string>
#include <vector>
#include <type_traits>
int main()
{
std::vector<int> v{1, 2, 3, 4, 5};
auto iter = begin(std::move(v));
if(std::is_const<typename std::remove_reference<decltype(*iter)>::type>::value)
std::cout<<"is const\n";
return 0;
}
http://coliru.stacked-crooked.com/a/253c6373befe8e50
我遇到这种行为是因为 declval<Container>()
在decltype
用 std::begin
表达. gcc 和 clang 都返回迭代器,这些迭代器在取消引用时会产生 const 引用。这可能是有道理的,因为右值引用通常绑定(bind)到您不想改变的过期对象。但是,我找不到任何关于此的文档来确定它是否由标准强制执行。我找不到 begin()
的任何相关重载或 Container::begin()
的 ref-qualified 重载.
更新:答案阐明了正在发生的事情,但交互可能很微妙,如下所示:
#include <iostream>
#include <string>
#include <vector>
#include <type_traits>
int main()
{
if(std::is_const<typename std::remove_reference<decltype(*begin(std::declval<std::vector<std::string>>()))>::type>::value)
std::cout<<"(a) is const\n";
if(!std::is_const<typename std::remove_reference<decltype(*std::declval<std::vector<std::string>>().begin())>::type>::value)
std::cout<<"(b) is not const\n";
if(!std::is_const<typename std::remove_reference<decltype(*begin(std::declval<std::vector<std::string>&>()))>::type>::value)
std::cout<<"(c) is not const\n";
return 0;
}
http://coliru.stacked-crooked.com/a/15c17b288f8d69bd
天真地,当::begin 只是根据调用 vector::begin 定义时,您不会期望 (a) 和 (b) 有不同的结果。然而,缺少采用非 const 右值引用并返回迭代器的 std::begin 重载(或返回 const_iterator 的 ref-qualified vector::begin 重载)恰恰导致了这种情况的发生。
最佳答案
正如您在 http://en.cppreference.com/w/cpp/iterator/begin 中看到的那样有趣的重载是:
template<class C> auto begin(C& c) -> decltype(c.begin());
template<class C> auto begin(const C& c) -> decltype(c.begin());
和std::vector<int>&&
只能绑定(bind)到第二个重载(因此返回 const_iterator
)。
关于c++ - C++11标准中是否规定std::begin(Container&&)返回const_iterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39788176/
我需要在每个vagrant up上运行vagrant,这可能吗?例如,此规定仅在第一个 vagrant up 上运行: config.vm.provision "shell", privileged:
我正在将一些 XML 传递给 RESTful Web 服务: Web 服务将解码该 XML,并且我想确保该 XML 有效。 我使用架构来创建 Java 对象,
我有一个 Django 小网站,用户可以在评论中链接到其他网站上的图片。这绝不是核心功能。 我刚刚将整个站点移至 SSL。这在大多数情况下都运行良好,但远程图像显然并不总是可以通过 SSL 获得。只有
如果我要创建一个所有 HTML 内容均由 ReactJS 组件生成的网站,它是否符合 WCAG AA 级标准? IE。屏幕阅读器能够浏览通过 JavaScript 代码呈现的内容吗? 如果答案是肯定的
我使用的是 ubuntu 13.04 机器,我已经正确安装了 vagrant。 以下是版本 Vagrant : Vagrant 1.5.1 虚拟盒子:4.2.10_Ubuntu84101 我正在运行一
我正在为 Vagrant 编写一个配置脚本,以安装部署使用 Meteor 1.6 开发的应用程序所需的所有软件包。到目前为止,脚本运行良好,但在执行过程中的三个点上,我在终端窗口中得到以下红色输出:
我需要简单地从我的 iPhone 应用程序向用户帐户发送一条推文,但是我所看到的内容对于我需要做的事情来说似乎有点繁重,而且我发现的所有内容似乎都有点旧并且我担心我添加的内容可能不符合新的 Twitt
背景 通过 union 讨论类型双关的大多数未定义或实现定义的性质通常引用以下位,这里通过@ecatmur ( https://stackoverflow.com/a/31557852/2757035
我是一名优秀的程序员,十分优秀!