Fee*_*eek 11 c++ non-member-functions visual-studio-2015 c++17
似乎大多数人找到a的大小的方式string是他们只是使用它my_string.size()并且它工作正常.好吧,我最近做了一个班级任务,我做了......
if (size(my_string) < 5)
store[counter].setWeight(stoi(my_string));
Run Code Online (Sandbox Code Playgroud)
代替....
if (my_string.size() < 5)
store[counter].setWeight(stoi(my_string));
Run Code Online (Sandbox Code Playgroud)
但令我惊讶的是,我的导师,我相信他正在运行一个较旧的编译器,但却无法运行那行代码.在我的编译器上它可以双向工作,我不太清楚为什么.
一个完整的程序(两个输出4):
#include <string>
#include <iostream>
using namespace std;
int main()
{
string myvar = "1000";
cout << "Using size(myvar) = " << size(myvar) << endl;
cout << "Using myvar.size() = " << myvar.size() << endl;
}
Run Code Online (Sandbox Code Playgroud)
如果有人能够解释为什么我的问题解决方案在我的机器上工作而不是我的教授?另外,我目前正在运行VS2015.
Nat*_*ica 11
MSVS 2015具有size以xutility定义的函数
template<class _Container>
auto inline size(const _Container& _Cont)
-> decltype(_Cont.size())
{ // get size() for container
return (_Cont.size());
}
Run Code Online (Sandbox Code Playgroud)
这是您致电时使用的功能
cout << "Using size(myvar) = " << size(myvar) << endl;
Run Code Online (Sandbox Code Playgroud)
这不是标准的C++ 11/14函数,不能在gcc或clang上运行
这篇文章在VS 2015 RTM的C++ 11/14/17特性中有详细介绍
Jon*_*Mee 11
size实际上是C++ 17的功能.真正的好处是类似的好处begin,并end从C++ 11.
请注意,第一个定义size只是返回容器的size方法.
所以,如果我有这样的模板化函数:
template <typename T>
auto foo(const T& bar) { return bar.size(); }
Run Code Online (Sandbox Code Playgroud)
这只能用于容器,但如果我将其更改为:
template <typename T>
auto foo(const T& bar) { return size(bar); }
Run Code Online (Sandbox Code Playgroud)
它也可以与C风格的数组一起使用.我在这里添加了一个实例:http://melpon.org/wandbox/permlink/Rlpi5wueA14JOW2P
总之,size如果您拥有C++ 17或更高版本的支持,则应始终使用它,因为它将提高跨容器和数组类型的可重用性.
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |