问题标签 [auto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何使用自动变量选择迭代器类型?
我有一个 std::unordered_map
我想使用 find 获得一个 const 迭代器。在 c++03 中我会做
在 c++11 中,我想使用 auto 来减少模板
这将是一个 const_iterator 还是迭代器?编译器如何决定使用哪个?有没有办法强制它选择 const?
c++ - 自动将 c++11 的 auto 关键字重写为派生类型
也许是一个奇怪的问题,但是有没有可用的软件,给定一堆 c++11 代码,派生所有类型的自动类型变量并用这些派生类型重写代码?还有初始化列表?
原因是我们希望提供代码的向后兼容版本(非 C++11),主要是为了与 osx 的可移植性。自动输入和初始化列表是我们最常用的功能,因为它们使代码更具可读性,但手动删除它们是不行的。因为这实际上是编译器对自动类型变量所做的事情,它似乎并不太牵强?
c++ - 是否可以在没有预处理器宏的情况下为 getter-setter 定义“虚拟”默认实现
可以使用模板来默认实现 getter-setter。
例如 - http://www.kirit.com/C%2B%2B%20killed%20the%20get%20%26%20set%20accessors/A%20simple%20meta-accessor。最重要的是,如果您决定覆盖此类 setter 或 getter 的默认行为,则无需更改“客户端”代码即可轻松执行此操作,因为 setter-getter 调用语法与调用方法相同,即:
在这两种情况下,an_int 都可以是带有 operator() 的对象或 an_object 的方法。在“客户端”代码中将需要重写后重新编译。
但是是否可以在没有预处理器宏的情况下为 getter-setter 定义“虚拟”默认实现?即这里重要的是,在“客户端”代码的覆盖重新编译期间不需要。当然可以使用预处理器,我想知道有没有更优雅的解决方案?
对于我的 C++03 知识是不可能的,但也许有人有一些想法,或者在 C++11 中是可能的?
“David Rodríguez - dribeas”的答案:像这样:
它可以在派生类中被覆盖,而无需重新编译“客户端”代码。
c++ - C++11 自动和 size_type
鉴于以下用法auto
:
对于 C++ 来说,推断i
为是理想的std::vector<int>::size_type
,但如果它只查看 的初始化器i
,它会看到一个整数。i
在这种情况下,推断的类型是什么?这是适当的用法auto
吗?
c++ - 在这种情况下,放入 decltype(x) 以指定返回类型的语法是什么
我有以下函数可以std::vector
在另一个容器中创建一个迭代器:
我想做的是:
我该怎么做x
才能让它发挥作用?
尝试但失败的尝试:
(另外,我不是这方面的专家,所以欢迎任何其他建议,评论!谢谢。)
c++ - 遍历列表映射?
我有一个map<string, list<int> >
我想遍历列表并打印出每个数字。我不断收到关于 const_iterator 和迭代器之间转换的编译错误。我做错了什么?
c++ - 'auto const' 和 'const auto' 是一样的吗?
和 之间是否存在语义差异auto const
,const auto
或者它们的含义相同?
c++ - c++0x中auto和decltype的区别
我在使用 auto 和 decltype 时遇到问题。
以上代码在GCC4.7中运行良好。我可以使用 'new auto(a[0]*b[0])' 为 a[0]*b[0] 类型分配内存吗?在这种情况下,我无法区分 decltype 和 auto 之间的区别。
c++ - 在 C++11 中使用 decltype() 时出错(在 gcc 4.7.0 中创建不透明的错误消息)
使用以下代码(我的原始代码的简化版本)
gcc 4.7.0 出现以下错误:
test.cc: 在函数
decltype (std::abs(x.diff(y))) dist(const A<X>&, const A<Y>&)
中 [withX = double; Y = double; decltype (std::abs(x.diff(y))) = double
]':test.cc:5:5:错误:
double A<double>::a
是私有的突出显示的行:错误:在此上下文中
这个错误信息显然不是很有帮助。我的代码有错误吗?或者这是编译器的问题?
EDIT1:朋友声明没有帮助。
EDIT2:避免使用A<Y>::a
也没有帮助。
EDIT3:与EDIT2一起终于解决了这个问题。的decltype()
定义中dist()
需要decltype()
for A<X>::diff()
,而后者又使用A<X>::a
,它在第一个上下文中是私有的。
EDTI4:Rook 的使用建议typename std::common_type<X,Y>::type
也有效!
EDIT5:但请参阅 Jonathan Wakely 对这个问题的回答
c++ - c++ auto没有命名类型
我在我的代码中使用关键字 auto
在使用以下命令编译时,我收到这些错误
使用 -std=c++0x 应该可以解决问题。怎么了 ?