首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么添加constexpr会让VS2013拒绝这个?

在C++中,constexpr是一个关键字,用于声明一个常量表达式。常量表达式是在编译时就可以计算出结果的表达式,它可以用于编译时优化和提高程序性能。

然而,constexpr关键字在C++11标准中引入,而VS2013是基于C++11之前的标准实现的,因此不支持constexpr关键字。因此,如果在使用VS2013编译器时尝试添加constexpr关键字,编译器会拒绝编译并报错。

要解决这个问题,可以考虑升级到支持C++11标准的编译器版本,如VS2015及更高版本。这样就可以使用constexpr关键字了。另外,还可以使用宏定义或其他方式来实现类似的编译时常量表达式的效果。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Visual Studio 2013 下 NuGet 无法识别自定义包路径的解决方法

packages 目录下, 这个可以说是 NuGet 的 bug , 也可以说是 VS2013 的 bug , 原因是: 安装 VS2013 时, 自动生成文件 %ProgramData%\NuGet...\Config\VisualStudio\12.0\Microsoft.VisualStudio.config , 这个文件为 VS2013 配置了一个特殊的源 Microsoft and .NET ,...NuGet 不能正确识别自定义的包路径, 估计 NuGet 更新并修复这个 bug , VS2013 估计是不会修改的啦。...暂时的解决方法就是删除这个文件, 如果你需要用到这个特殊的 NuGet 源, 可以把它添加到 NuGet 的选项中。...还有一个小问题就是 Json.Net , 安装 VS2013 时, 自动部署一个 .Net 4.0 版本的 Json.Net 到系统的 GAC 中, 很难删除, 需要修改注册表才能删除, 但是为了VS

1.8K30

深入探讨 `constexpr` 和 `const` 的区别

3. constexpr 和 const 修饰函数的区别 constexpr 修饰函数 编译期计算: constexpr 函数可以在编译期进行计算,如果其参数是编译期常量。...编译器尝试在编译期求值 constexpr 函数,以提高性能和安全性。 函数要求: constexpr 函数必须是纯函数,即没有副作用,且其返回值仅依赖于输入参数。...示例: constexpr int foo(int i) { return i + 5; } constexpr int result = foo(10); // 编译期计算 constexpr...class MyClass { public: static constexpr int staticValue = 100; }; constexpr 高级用法 模板元编程:constexpr...文档和注释:在代码中添加注释,说明为什么某个函数或变量被声明为 constexpr。这有助于其他开发者理解你的意图。10.

9410

性能优化利器之constexpr

概述 说明符constexpr是自C++11引入,我相信很多人跟我一样,在第一次接触这个的时候,很容易和const混淆。...通过本示例,可以看出,将函数声明为constexpr可以提示效率,编译器来决定是在编译阶段还是运行阶段来进行求值,当然了,如果想了解在编译阶段求值的各种细节规则,请参考constexpr in cppreference...以Square(i)为例,这是因为在编译的时候,尝试int.value操作,显然int.value不存在,这就导致了上述的错误输出,为了更为清楚的显示本错误,将Square()修改如下: int Square...if (true) { return t * t; } else { return t.value * t.value; } } 这样就能很清楚的知道为什么编译失败了...在上述代码中,为了编译成功,我们引入了两个Square()模板函数借助std::enable_if来实现,代码上多少有点冗余,在这个时候,本节的主角if constexpr 出场,完整代码如下: #include

33610

Modern c++快速浅析

模板类型推导 模板类型推导中最重要的是弄清它什么时候抛弃引用,什么时候抛弃常量性 •template void func(T& param);在这个示例函数中,如果传递进是一个...auto value3 = static_cast(result[2]); [c++中为什么不提倡使用vector?]...decltype(auto) 上文中提到auto作为返回值时将采用模板类型推导的规则,正因为如此它可能遗失一些我们需要的类型(如引用或常量性),这个时候就需要使用decltype(auto) template...在拓展typedef的同时也C++的C++味儿更浓了 typedef int Status; using Status = int; 回归主题,在一些十分复杂的名称面前,我们会选择取别名,比如 typedef...num) constexpr { return num + 10; }; int arr[lambda(10)]; 隐式constexpr 当Lambda满足constexpr条件时,自动隐式声明其为

15810

《Effective Modern C++》读书笔记

正文 为了本文更加清晰,依然还是用条款的形式来介绍知识点。...想一下,如果 = delete的函数是private,然后这个函数被外部调用,编译器可能只是给出"不能调用private函数"的错误信息。这可能误导调用者。...即干掉这个函数的不必要信息,它更轻量。 noexcept在标准库里部有很重要的应用,具体请阅读原书。 noexcept还是支持表达式计算的。...当你着手的代码需要用到编译时期常量时,可以使用constexpr函数,如果你给constexpr函数传递一些编译时期可知的参数(这些参数来源于上下文),那么这个constexpr函数很可能会在编译时期被执行...不过这也值得高兴了,这个特性可以程序性能有了进一步提高,譬如可以把复杂的静态class常量变成constexpr,使得在编译器就把变量生成了,而不是等到运行期(即使你说运行期只创建一次)。

1.8K20

每个开发者都应该了解的一些C++特性

auto 的概念是 c++编译器在编译时自动推断数据的类型,而不是每次都要求你手动声明类型。...在之前的版本中,每个变量必须要分别进行提取,然而结构化绑定会使这个过程方便很多。...另外,如果你想通过引用获取数据,只需要添加一个像 auto &[v1,v2] = itr.second 这样的符号,非常简洁。...或者像 C++11 中提供的,你可以使用 constexpr。 编程人员倾向于尽可能减少程序的运行时间。因此如果某些操作可以编译器来做,就可以减轻运行时的负担,从而提高时间效率。 ?...这是声明为 constexpr 的函数非常重要的一点,传递的参数同样要是 constexpr 或者 const。否则,该函数像普通函数一样执行,即不会在编译时预先计算。

74320

C++ 中的卷积神经网络 (CNN)

你们可能为什么 C++ 在 Python 中很容易使用大量库,你们现在可能已经看到一些特斯拉汽车,这些类型的系统需要从它们的环境中进行实时推理,而 Python 非常适合原型设计,但不提供实时当使用它部署如此庞大的模型时会更新...predLabels(i) = predOut.col(i).index_mat() + 1; } return predLabels; } 在这一部分下面,代码将出现在main函数中,但它的编写并不是为了代码易于解释...constexpr double RATIO = 0.1; // ratio to divide the data in train and val set. constexpr int MAX_ITERATIONS...Adam optimizer. constexpr int BATCH_SIZE = 50; constexpr size_t EPOCH = 2; mat tempDataset; data::Load...valid.row(0) + 1; const mat testY = test.row(0) + 1; 我们将使用负对数似然损失,在 mlpack 库中,它的标签从 1 而不是 0 开始,因此我们在标签中添加

1.2K20

浏览器开发系列第四篇:windows下如何调试最新chromium源码

接二连三的事情,时间比较紧张,但是还是没有把这个系列的文章丢掉,因为这也是对自己知识的总结吧。提倡大家多写写,以后再看的时候会有种莫名的小激动。...我今天主要讲使用vs2013调试源码。...使用单进程模式,需要在在Chrome项目属性调试页中的命令行参数添加--single-process。这种方法并不完美,因为有些问题不会出现在这个模式。...3.使用vs2013自带的“附加到进程”选项调试 直接在vs2013中调试时,可以使用附加到进程的功能,直接开启调试后,点击Tools > Attach to Process,附加你需要调试的进程即可...另外还有很多有用的参数可以设置,使用这些参数可以你随心所欲的实现自己想要调试的内容,chromium团队也在一直努力调试变得更简单实用。

2.6K80

C++那些事之SFINAE

2.老式的C++98方式 不管你的编译器是过时的,还是你的老板拒绝为最新的Visual Studio许可证付费,或者你只是喜欢考古学,这一章都会你感兴趣。...在上面两步生成的可行函数集合中,编译器寻找一个最佳匹配,产生对该函数的调用 如果没有找到最佳匹配,或者找到多个匹配程度相当的函数,则编译器需要报错。...您可能还想知道为什么它不能与继承一起使用。C ++中的继承和动态多态性是一个在运行时可用的概念,换句话说,就是编译器将不会拥有且无法猜测的数据!...这个问题如何解决呢? 第一种解决方案:加上constexpr,具体后面阐述。...constexpr c++ 11还提供了一种执行编译时计算的新方法! 新的关键字constexpr是编译器的一个提示,这意味着这个表达式是常量,可以在编译时直接求值。

2.2K20

Unity入门教程(上)

这个符号表示当前项目文件需要保存。保存后该符号就会消失,之后如果又做了什么操作需要重新保存,该符号再次出现。 2,在窗口顶部菜单中依次点击File→Save Scene。 ? ?...当需要查看某游戏对象时这个方法会很方便。...这时Visual Studio 2013将会启动,Player.cs脚本被打开(我将Mono Develop编辑器换成了VS2013) 注:在项目视图中双击脚本项也能够启动编辑器(在这里是VS2013)...点击VS2013标题栏上的的文件→保存。 保存完后退出VS2013。 ? 4,回到Unity编辑器中,也进行保存(步骤四)。 5,把新建的类组件添加到Player游戏对象上。...在步骤十一添加游戏脚本中,大多数人为什么and如何将Unity编辑器换成Visual Studio?请点击链接查看问题的根源和详细的解决步骤! (这次写的比较长,能坚持看到这的,令我感动!

3.4K70

斩获 3.4k+ Star 的 C++ Insights:用编译器的视角看源码!

它能帮我们看到编译器为了代码正常运行而进行的一些神奇操作。...2、为什么要做 C++ Insights? 2017 年,我开始研究 C++11、C++14 和 C++17 带来的一些新特性,如 lambda 表达式、基于范围的 for 循环和结构化绑定等。...然而,所有这些研究以及我的一些培训和教学经历我开始思考:如果我们能以编译器的视角来洞悉代码,那将会是怎样一番景象?...对于带有 VS 的 Clang: 前往 LLVM 下载页面; 从“Pre-Built Binaries”部分安装“Windows(64位)”; 安装程序自动将 LLVM 工具集添加到你所有 Visual...要解决这个问题,可查看 scripts/getinclude.py,这个脚本会尝试从编译器中收集系统包含路径。

14910

数组的下标越界与内存溢出有关吗_数据量过大数组报下标越界

关于C/C++为什么不对数组的下标是否越界做检查,可以参考: http://www.xuebuyuan.com/967089.html 因为编译器不会自动检测你的数组下标是否越界,而是把这个任务交给了程序员自己...arr[%d] = %d\n", index,arr[index]); system("pause"); return 0; } 数组定义为arr[10],它的下标范围是 0–9 ,超出这个范围就会发生下标溢出...以上两张图片是在VS2013里面的运行结果,两次输入的下标都会越界,但为什么第一张图报错了(数组下标越界),而第二张没有。...这是因为VS2013这个编译器在处理数组下标时,只认为当引用的下标等于数组元素个数时下标越界(可能是怕初学者把数组下标当成是以0开始的吧),别的情况别不回去检测和处理(当我输入的值大于等于11,程序都不会报错...因此,虽然数组在C语言中是个很强大的东西,但在应用时一定要注意,千万不要出现下标越界的情况,因为这样造成不可想象的错误。

1.7K60

C++の自动类型推导和其他

其实,我们可以根据这个词的意思差不多猜出这个关键字的功能 —— 自动类型推导。也就是说如果一个变量的类型是auto时,它会根据变量的值自动推导出类型。...我们定义了一个迭代器pred_box,这里由于auto自动推导其类型,我们几乎什么都不用管。但是实际上它的类型是什么样的呢?...如下: int k = j; 可能有的朋友会有些疑惑,既然表达式 int &k = j; 是错误,为什么去掉&就可以了呢?简单解释一下,其实引用并不是一个实体对象,而是代表了一种绑定关系。...constexpr作为限定词在含义上与const并不相同,constexpr是为了在初始化一个变量时,编译器判断这个变量的值是否是一个常量或常量表达式,如果该变量用constexpr限定,但是初始化值并不是一个常量或者常量表达式...b = newfun(); 在这两个例子中,编译器在编译时会检查k+1和newfun()是否是常量表达式(函数),如果不是,上面的定义就不成立,编译失败。

64510

技术◈C++核心知识总结(I)

我们定义了一个迭代器pred_box,这里由于auto自动推导其类型,我们几乎什么都不用管。但是实际上它的类型是什么样的呢?...如下: int k = j; 可能有的朋友会有些疑惑,既然 int &k = j; 不可以,为什么去掉&就可以了呢?简单解释一下,其实引用并不是一个实体对象,而是代表了一种绑定关系。...这个涉及到类与对象相关的知识,还有成员函数,成员变量,展开讲的话会比较多,后面与类和对象放一起说。 (2)constexpr的用法 上面我们讲了讲const的用法,下面就简单说下constexpr。...constexpr作为限定词在含义上与const并不相同,constexpr是为了在初始化一个变量时,编译器判断这个变量的值是否是一个常量或常量表达式,如果该变量用constexpr限定,但是初始化值并不是一个常量或者常量表达式...b = newfun(); 在这两个例子中,编译器在编译时会检查k+1和newfun()是否是常量表达式(函数),如果不是,上面的定义就不成立,编译失败。

74630

现代C++之SFINAE

2.老式的C++98方式 不管你的编译器是过时的,还是你的老板拒绝为最新的Visual Studio许可证付费,或者你只是喜欢考古学,这一章都会你感兴趣。...在上面两步生成的可行函数集合中,编译器寻找一个最佳匹配,产生对该函数的调用 如果没有找到最佳匹配,或者找到多个匹配程度相当的函数,则编译器需要报错。...您可能还想知道为什么它不能与继承一起使用。C ++中的继承和动态多态性是一个在运行时可用的概念,换句话说,就是编译器将不会拥有且无法猜测的数据!...这个问题如何解决呢? 第一种解决方案:加上constexpr,具体后面阐述。...constexpr c++ 11还提供了一种执行编译时计算的新方法! 新的关键字constexpr是编译器的一个提示,这意味着这个表达式是常量,可以在编译时直接求值。

2.9K20

(七)开源一款即时通讯软件的源码

在我的《服务器端编程心得》这个系列的第一篇至第六篇都是讲了一些零散的不成体系的网络编程细节。...目前即时通讯软件实现了如下功能(这里只列举网络相关的功能,其他客户端已经实现的功能不统计在列,请自行发现): 注册 登录 查找好友、查找群 添加好友、添加群 好友列表、群列表、最近会话 单人聊天功能(包括发文字...第一次运行mychatserver时,如果能顺利连上mysql,mychatserver自动检测是否存在名为myim的数据库,如果不存在则创建,并新建三张信息表,分别是用户信息表:t_user, 好友关系表...第一次启动文件服务器时会创建filecache目录,这个目录用来存储聊天中的聊天图片和离线文件以及客户端升级包。...当然,我保证,我会持续维护flamingo,这款软件越来越好,欢迎关注github上的更新:https://github.com/baloonwj/flamingo。

6.1K50
领券