关于std数组和内置数组初始化的疑惑
来源:互联网 发布:淘宝店铺整体托管 编辑:程序博客网 时间:2024/05/21 21:38
今天是学习meyers大师的新作《Effective Modern C++》第一天,看到第一节时好奇在VS2015跑了一个程序,如下:
#include<iostream>using namespace std;template<typename T, size_t N>constexpr size_t getsize(T(&)[N]){return N;} int main() { int name[] = { 1,3,5,7,9 }; array<int, getsize(name)>names; cout<<getsize(names);return 0; }
在这处:
array<int, getsize(name)>names;显示“”表达式必须含有常量值“”,但是将std数组改为内置数组后:
int names[getsize(name)];
编译通过。这就迷惑了。我用的模板返回值是constexpr的啊,返回值应该可以在编译时确定,然而std数组却“不认可”我提出的请求。原因暂时没想明白。记录一下,权当我的第一篇博客吧。
第二天更新。有了解决方法,就是再添加一行:
constexpr size_t size = getsize(name);然后用main函数里定义的这个size传递给array,代替getsize函数,就可以了。分析原因是可能我虽然定义了模板,并声明称constexpr的,但是在main函数里的array身上失去了该属性,编译器并没有认为这是一个常量表达式。好吧,关于内置数组能用而std::array不能用的深层原因有待分析,起码问题是解决了,哈哈。
0 0
- 关于std数组和内置数组初始化的疑惑
- 关于数组和数组初始化的问题
- 关于数组的初始化
- JAVA关于数组和二维数组的声明和初始化
- 关于数组名与指针的疑惑
- 数组指针的疑惑
- 数组指针的疑惑
- 关于DELPHI数组的初始化
- 关于字符数组的初始化
- 关于字符数组的初始化
- 关于Java数组的初始化
- 关于字符数组的初始化
- 关于字符数组的初始化
- 关于java数组的初始化
- 关于全局数组的初始化
- 关于java数组的初始化
- 第三章 3.5.1 定义和初始化内置数组
- c的关于数组初始化 和 memset用法
- hibernate_Restrictions用法
- leetcode uglynumber
- Linux基础(一)——文件基本属性
- 高效使用你的Xcode
- BZOJ2851: 极限满月
- 关于std数组和内置数组初始化的疑惑
- 莫比乌斯反演入门
- 关于 ThreadLocal
- leetcode 239. Sliding Window Maximum
- 软件设计七大原则
- 第15周程序阅读3
- 彻底解决 libhdf5_hl.so.10: cannot open shared object file: No such file or directory
- JZOJ.3432【GDOI2014模拟】服务器 解题报告
- 图的遍历算法-马遍历棋盘