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

在C++11和C++14中有没有使用字符指针数组定义的constexpr的替代品?

在C++11和C++14中,没有直接使用字符指针数组定义的constexpr的替代品。在这两个版本中,constexpr关键字主要用于声明常量表达式,以便在编译时求值。它可以用于定义常量值、函数和构造函数。

在C++11中,constexpr函数可以包含一些简单的控制流语句,但不能包含循环语句。在C++14中,constexpr函数的限制更加宽松,可以包含一些简单的循环语句。

然而,在C++11和C++14中,如果你想使用字符指针数组定义一个constexpr,你需要使用其他的技巧。一种常见的方法是使用std::array来替代字符指针数组,并将其声明为constexpr。std::array是一个固定大小的数组容器,提供了更好的类型安全性和更多的功能。

下面是一个示例代码:

代码语言:txt
复制
#include <array>

constexpr std::array<const char*, 3> myArray = { "Hello", "World", "!" };

int main() {
    // 使用constexpr定义的std::array
    constexpr auto size = myArray.size(); // 获取数组大小
    constexpr auto element = myArray[0]; // 获取数组元素

    // 其他操作...
    
    return 0;
}

在上面的示例中,myArray是一个包含3个常量字符指针的std::array,它被声明为constexpr,可以在编译时求值。你可以使用size()方法获取数组的大小,使用[]运算符访问数组的元素。

需要注意的是,虽然C++11和C++14中没有直接使用字符指针数组定义的constexpr的替代品,但C++17引入了constexpr if语句,可以更灵活地在constexpr函数中使用条件语句。所以,如果你使用的是C++17或更高版本,你可以考虑使用constexpr if来实现类似的功能。

总结起来,在C++11和C++14中,没有直接使用字符指针数组定义的constexpr的替代品,但你可以使用std::array来替代字符指针数组,并将其声明为constexpr。

相关搜索:使用字符指针和字符数组之间的区别在c++中使用指针的数组和。可以在Reactjs中直接使用Jstree。在reactjs中有没有jstree的替代品?在NodeJS中有没有使用expressJs和HapiJs的方法?在python3中有没有从字符串定义函数名的方法?在C中使用数组括号和指针表示法的循环有什么不同?在没有cstring的情况下比较C++中的字符数组和字符串文字javascript中有没有使用字符串数组作为对象路径的一行程序?使用valmin和valmax在matplotlib vice中定义特定滑块值的数组在C++中有没有使用关键字来确定数组长度的方法?使用Scala和Spark在列中字符串的数组[Array[String]]无法绘制绘图,因为在本地rstudio和r ui中有特定的日语字符,但在使用plot的rstudio.cloud中没有问题在Cosmos DB中有没有一种方法可以使用SQL API来过滤字符串数组中的值?当我尝试在组件上使用数组方法时,为什么我的数组变量在组件中没有定义?有没有办法每次在循环中使用不同的预定义数组在c#中有没有一个等价的带有整数和字符串成员变量的c++联合?在Javascript中有没有一种使用字典对字符串进行编码的简单方法?用于检查数组列表的子字符串的方法和循环在Java中似乎没有返回正确的值使用FPDF和PHP,有没有办法在一个单元格中混合两种字体的字符?我希望在普通的文本字符串中有一个符号字符如何使用printf()和输入单词的字符串数组在星号框内打印输出
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

constexpr和常量表达式

constexpr类型的构造函数(除拷贝构造函数外),所有非静态的数据成员以及字面值类型的基类 或者一个字面值类型的数组 上面对于字面值类型的定义还牵涉到平凡类型(trivial type),在另一篇博文会讲到...尽管我们可以定义一个const变量并把它的初始值设为我们认为的某个常量表达式,但在实际使用时,尽管要求如此,却常常发现初始值并非常量表达式的情况。因此,对象的定义和使用根本就是两回事儿。...1.函数体被声明为constexpr 2.非虚函数 3.返回类型及所有形参的类型都必须是字面值类型 4.函数中有且只有一条return语句(在C++14标准中这条规定被删除) constexpr...int new_sz () {return 24;} constexpr int foo = new_sz(); C++11中关于constexpr函数的定义参考链接:cppreference 在C...和其它函数不一样,内联函数和constexpr函数可以在程序中多次定义。毕竟,编译器要想展开函数仅有函数声明时不够的,还需要函数的定义。

40610
  • Modern c++快速浅析

    因为这是一个拷贝指针的操作,因此保留原指针的不可更改指向性并没有太大的意义 auto 大多数情况下auto推断出来的结果和模板类型推导的结果是一样的,不同点在于对大括号初始物的处理 值与指针等推导 const...constexpr constexpr代表编译期常量,它所标识的值可能被放入到只读内存段中,如数组,非类型模板参数,枚举类型等要求的都是编译期常量,const代表运行期常量。...的泛用性在每代C++中都得到了提高 在C++11中,constexpr可以用来修饰对象(包括内置类型和自定义类型),以及可以用来修饰函数(构造函数,成员函数,普通函数等等),如果以constexpr修饰构造函数...1 : base * pow(base, exp - 1)); } 在C++14中,对constexpr修饰的函数做了进一步的拓展,C++14中的constexpr函数不再是只能单纯的包含一条return...) 但按值捕获也不一定能保证悬垂安全,例如对this指针的捕获 初始化捕获 初始化捕获是C++14中引入的新特性,解决了C++11中无法“移动捕获”的问题(可以理解为是为Lambda生成的匿名类创建并初始化类成员

    20410

    const成员函数一定是线程安全的吗?

    在C++98中并不好用,所以大家都用情况1了 for(auto i:valuess) { cout<<i<<endl; } //情况2:C++11 获取和使用...函数在传入编译期常量时能够返回编译期结果,它们的实现就必须加以限制,而在C++11和C++14中,这样的限制还有所不同 //C++11:constexpr函数不得包含多于一个可执行语句,即一条return...//注意 c++11 中有两个限制规定如下不能定义为 constexpr //1, 它们修改了操作对象,在c++11中 constexpr函数都隐式地被声明为 const...,一个返回赋值的返回参数 */ //1, 拷贝构造函数 class XML{ public: //默认构造函数: 不带任何参数,在没有定义其他构造函数的情况下,编译器会自动生成默认构造函数...,编译器会自动生成拷贝构造函数 /** 注意两点: 1, 类中存在指针,会出现深拷贝和浅拷贝的问题,此时必须自定义拷贝构造函数实现深拷贝

    1.1K20

    C++14新增特性汇总

    C++14整体来说只是发行的一个小版本,在C++11大版本的基础上做了一些优化和缺陷的修复。C++14在2014年8月18日正式批准宣布,同年12月15日正式发布release版本。...,使用方法如下: template constexpr T pi = T(3.1415926535897932385L); // 变量模板 在实际编码中,C++14以前如果要实现上面的功能...3 constexpr放松限制 使用constexpr-描述符后,指定的变量或函数的值可以在常量表达式中使用。...在C++11中,constexpr只能只用递归,C++14后进行了优化和提升,可以使用局部变量和循环。且不用将所有的语句放在一条return语句中进行编写。...(x==y)<<std::endl; return 0; } 代码输出结果为:1 5 函数返回值推导 在C++11中使用后置类型推导函数返回值,C++14起,可以省略,返回值使用auto,编译器直接将函数体中的

    50510

    Chapter 3: Moving to Modern C++

    ,也没有一个指针类型,但是可以代表所有类型的指针,nullptr的实际类型是nullptr_t,可以被隐式地转换成所有原始指针类型 f(nullptr); // calls f(void*) 当在使用模板时...它们的值也许会被放在只读内存区中,它们的值也能被用在整型常量表达式中,例如数组长度,整型模板参数,枚举值,对齐指示符等等 当constexpr函数使用constexpr对象时,它们会产生编译期常量,如果...constexpr函数使用了运行时的值,它们就会产生运行时的值,但是如果constexpr函数使用的所有参数都是运行时的值,那么就会报错 在C++11中,constexpr函数只能包含不超过一条return...在C++14中,constexpr函数的语句数量没有限制,但是函数必须接收和返回字面值类型,也就是指可以在编译期间确定值的类型。...字面值类型包括除了void修饰的类型和带有constexpr修饰的用户自定义类型(因为构造函数和其他成员函数也可能是constexpr) class Point { public:

    1.8K60

    机器人CPP编程基础-03变量类型Variables Types

    复合类型(如数组、指针、引用等)的进一步扩展: 指针数组:数组的元素是指针类型。例如int *arr[5]定义了一个包含5个指向整数的指针的数组。...这些是C++中的主要变量类型。根据需要,还可以创建自定义类型和结构,以满足特定的编程需求。 C++14引入了一些新的变量类型,这些类型在C++11和C++17中都有所扩展。...原子类型包括整数、浮点数和指针类型。 atomic:定义了一个原子操作的基本类型。原子操作是一种在单个线程中执行的操作,它可以在没有其他线程干扰的情况下修改数据。...atomic_flag:定义了一个原子标志,可以用于实现简单的原子布尔操作。 数组的初始化:C++14引入了一种新的数组初始化方法,允许使用花括号{}进行初始化。...指针类型 int *p;:定义一个指向整数的指针。 char *str;:定义一个指向字符数组的指针。 数组类型 int arr[10];:定义一个包含10个整数的数组。

    20220

    C++17常用新特性(十)---模板特性:字符串变量当做模板参数

    在C++的历次版本发布中,对C++模板参数的标准一直保持开放的态度,且对参数的要求也在逐渐放宽。从C++17开始,非类型的模板参数也可以在使用时定义了而不必定义在不同的作用域。...1 在模板中使用字符串 在模板编程中,非类型的模板参数被限制了诸多条件,只能从以下几种类型中获取,如:枚举、对象、指针、常量以及函数的左值引用、字符串变量。...对于字符串变量,使用方式和之前的版本并没有太大的区别,都不能直接在模板类型参数中使用。...: ExecptionMsg msgError; 编译将会报错,报错信息如下: 由此可见,在非类型的模板参数中,字符变量是不能直接使用的,在使用之前需要先进行定义。...2 将指针作为模板实参 从C++11开始,已经允许将指针作为模板的实参,但是还有一个限制,既在模板实例化时不能将一个返回指针的函数当做模板的实参。

    1.8K30

    C++17, 语言核心层有哪些新的变化?

    看到一个介绍 C++17 的系列博文(原文),有十来篇的样子,觉得挺好,看看有时间能不能都简单翻译一下,这是第一篇~ C++11, C++14, 以及 C++17.....如果你熟悉C++,那么你一定知道 C++98(第一个C++标准) 和 C++11 是两个非常大的C++标准, 但C++14,特别是C++03则是两个小标准....从我的观点来看,答案其实挺简单的: C++17 介于 C++14 和 C++11 之间,既不属于大标准也不属于小标准,至于原因,看看下面的说明吧....行代码从C++第一个标准开始(C++98)便是合法的,但是25行及26行代码则只能在C++17中编译通过,因为在C++17之前,你必须使用尖括号()来指定需要实例化的类模板的类型参数....,但RVO一直都只是一种可能优化步骤(并没有标准规范,编译器可以选择进行RVO或者不进行RVO),C++17中通过定义 guaranteed copy elision 保证了这种优化的执行.

    86020

    C++17常用新特性(六)---lambda表达式的扩展

    从C++11起就引入了lambda表达式,C++14又对其进行了丰富,开始支持使用泛型lambda。到现在的C++17 lambda的功能又进行了扩展。...这些上下文环境主要包含的场景有:只使用字面变量、没有静态类型、没有虚函数、没有异常捕获及new/delete的上下文环境。...但是它依然可以在运行期使用,试着将第6行代码段进行注释,那么代码可以继续编译且打印出计算结果。 同样的,如果在上面代码中显示定义成constexpr。...2 constexpr lambda的使用 下面的例子主要演示了在lambda中使用constexpr,代码分别在编译期和运行期调用lambda的场景,代码如下: auto hash = [](const...hv1{hashed("wine"), [](auto h, char c) {return h*33 + c;})}; 3 向 lambda 传递 this 的拷贝 在C++11或者C++14中,

    97820

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

    第 7 和第 8 行中,我使用了花括号初始化。这个特性也是 C++11 中新加入的。 记住,当使用 auto 时,必须确保你的编译器可以通过某种方式推断数据类型。...另一种非常普遍的应用是将其作为比较函数。 ? 上面的例子中有很多细节。 首先,要注意到列表初始化为你节省了多少代码。然后是通用的 begin() 和 end(),它们同样也是 C++11 中新添加的。...这里使用方括号[]作为 lambda 表达式的开始。它定义了 lambda 函数的作用域,即它对局部变量和对象有多少权限。 下面是一些现代 c++中的相关定义: []代表空。...因此你不可以在 lambda 表达式中使用任何外部作用域的局部变量。只可以使用参数。 [=]代表可通过值获取作用域内的局部对象(局部变量和参数),即你只可以使用但不可修改。...有趣的是,在之后的 c++17 中,又引入了 constexpr-if 和 constexpr-lambda。 tuple 和 pair 非常相似,tuple 是一组各种数据类型的固定大小值的集合。

    77120

    C++ 中 const 和 constexpr关键字解析:常量、函数和指针

    是C++11中引入的一个关键字,它的作用主要是用来修饰一些函数和变量,使其成为常量表达式,从而在编译器就可以进行计算,进一步提高程序运行期的效率 常量表达式:指的是有一个或多个常量组成的表达式,在实际开发中经常会接触到常量表达式...还可以用于修饰函数的返回值,在C++11中被constexpr修饰的函数只能是非void类型的函数,而且必须非常简短,通常只有一句return表达式。...不过在后续的C++14/17/20标准中进一步的放宽了这了限制,都可以通过编译了 constexpr int test() { return 1 + 1; } 修饰构造函数 constexpr还可以用于修饰自定义类型...Student s{"zhangsan", 18}; s.print(); } 总结 const可以修饰编译期和运行期的常量,而constexpr只能修饰编译期的常量 const在仍然可以通过...const_cast类型转换来修改值,而constexpr是不可以修改的,其实可以将const理解为只读变量更符合其含义 const只能用于非静态成员函数,而constexpr可以和成员,非成员,构造函数一起使用

    98420

    现代C++之constexpr

    现代C++之constexpr constexpr在 C++11 引入、在 C++14 得到大幅改进。...因此,const变量既可以定义编译时常量(比如size1)来指定数组大小,也可以定义运行时常量(比如size2)来定义数组大小。另一方面,constexpr总是定义可以指定数组大小的编译时常量。...; constexpr 函数当使用在编译期间已知值的参数调用时,constexpr函数产生编译时结果; 与非constexpr对象和函数相比,constexpr对象和函数可以在更广泛的上下文中使用; constexpr...5.补充 内联变量C++17 引入了内联(inline)变量的概念,允许在头文件中定义内联变量,然后像内联函数一样,只要所有的定义都相同,那变量的定义出现多次也没有关系。...这是因为 ODR(下面的one definition rule)-use 的类静态常量也需要有一个定义,在没有内联变量之前需要在某一个源代码文件(非头文件)中这样写: const int magic::

    1.2K20

    真没想到nullptr和NULL得区别,大了去了

    第3章 转向现代C++ 条款7:在创建对象时注意区分()和{} //创建对象时候注意区分 () 和 {} //指定初始化的方式有:小括号,等号,大括号 //情况1:内建型别来说 int 初始化和赋值没有区别...,所有使用大括号来完成对象的默认构造没有问题 //大括号解决的第三类问题:构造函数形参中 具备 std::initializer_list型别 //1, 如果没有以上型别,() 和 {} 没有区别 class...//区别一:处理函数指针的理解性 //区别一:处理函数指针的理解性 //FP的型别是一个指涉到函数的指针,该函数形参包括一个 int 和一个 const std::string&, 没有返回值 typedef...没有定义 }; //C++11中 delete将复制构造函数和复制赋值运算符标识为删除函数 //C++11中 delete将复制构造函数和复制赋值运算符标识为删除函数 template指针表示得式C风格得字符串,不是指涉到单个字符得指针 //假定采用这两个型别时拒绝调用,不可以使用 void* 和 char* 来调用 processPointer //删除来具体实现 //删除来具体实现

    1.8K30

    C++ 关键字constexpr

    constexpr 是 C++11 引入的一个关键字,用于指定表达式或函数的值在编译时就可以确定。使用 constexpr 可以在编译期进行优化,从而提高程序的运行效率。...函数只能调用其他 constexpr 函数。 函数的参数和返回类型必须是字面类型(例如,整数、浮点数、指针、字面类类型的对象等)。...用于类构造函数unsetunset 在 C++11 及更高版本中,类的构造函数也可以被标记为 constexpr。 这意味着使用该构造函数创建的对象可以在编译时初始化。...在 C++14 及更高版本中,constexpr 函数可以包含多个语句,但仍需满足编译时计算的要求。...通过使用 constexpr,开发者可以创建更加高效和优化的代码,特别是在需要编译时常量或模板元编程的场景中。 请注意,以上信息基于 C++11 及其后续版本。

    15310

    c++11新特性,所有知识点都在这了!

    nullptr nullptr是c++11用来表示空指针新引入的常量值,在c++中如果表示空指针语义时建议使用nullptr而不要使用NULL,因为NULL本质上是个int型的0,其实不是个指针。...但父类却没有这个虚函数,编译报错,使用override关键字可以避免开发者在重写基类函数时无意产生的错误。...char *const ptr; // 指针本身是常量 const char* ptr; // 指针指向的变量为常量 在函数参数中使用const,一般会传递类对象时会传递一个const的引用或者指针,这样可以避免对象的拷贝...c++11中是不是方便了许多,而不需要定义一个对象,在计算对象的成员大小。...,内部不会排序,使用方法和set类似 std::unordered_map:基于hash表实现的map,内部不会排序,使用方法和set类似 std::array:数组,在越界访问时抛出异常,建议使用std

    20.8K24

    c++17好用的新特性总结

    C++14在11的基础上查缺补漏,并未加入许多新特性,而C++17作为C++11后的第一个大版本,标志着现代C++逐渐走向成熟。......... 1.auto关键字 从c++11开始,auto关键字能够通过初始化器推导出变量的类型。在c++14中,auto关键字的能力进一步提升,能够通过return语句推导出函数的返回类型。...在c++17之前,只能自己通过独占锁和条件变量自己实现读写锁或使用c++14加入的性能较差的std::shared_timed_mutex。...“视图”,类成员变量包含两个部分:字符串指针和字符串长度,std::string_view涵盖了std::string的所有只读接口。...平时代码中可以大规模使用的一个特性。其实对于string的争论一直没有停止过,很多人认为string是字节串而不是字符串,因为string是可以改变的,这一切争论到C++17可以停止了。

    3.4K10

    C++的constexpr

    constexpr是C++11引入的关键字,用于定义在编译时求值的常量表达式。它可以修饰函数、对象和模板参数,并要求其在编译时就能够得到计算结果。...常量折叠:当使用constexpr定义多个常量并进行计算时,编译器会尝试在编译时将它们合并为一个常量,以进一步优化代码。...宏替代:使用constexpr可以取代宏,在编译时执行计算和逻辑操作,避免了宏带来的一些问题(如类型安全性和可读性)。...需要注意的是,在C++11中,对于constexpr函数和对象,编译器的要求比较严格,限制了函数的复杂性和对象的初始化方式。...但是,随着C++14和C++17的发布,对constexpr的限制逐渐放宽,允许使用更复杂的控制流语句、递归调用和局部变量等,提供了更大的灵活性。

    23520
    领券