草庐IT

is_constexpr_copiable

全部标签

c++ - gcc 和 clang 中 constexpr 静态成员变量的链接器错误

我有一个片段:enumclassEC{a,b};structB{constexprB(ECec):ec_(ec){}ECec_;};structA_base{constexprA_base(Bb):b_(b){}Bb_;};structA:A_base{staticconstexprBbbb=EC::a;constexprA(Bbbbb):A_base(bbbb){}};intmain(){Aa1(A::bbb);//1Aa2{A::bbb};//2Aa3=A::bbb;//3Aa4={A::bbb};//4}它在支持c++17的现代编译器中编译良好。使用c++11和c++14标准支持

c++ - 如果 constexpr 与 sfinae

随着ifconstexpr的引入在c++17,在c++14中使用编译时SFINAE解决的一些问题/c++11现在可以使用ifconstexpr解决,语法更简单。例如,考虑以下编译时递归的基本示例,以生成打印可变数量参数的子例程。#include#includetemplatevoidprint_sfinae(T&&x){std::coutstd::enable_if_t0)>print_sfinae(T0&&x,T&&...rest){std::cout(rest)...);}templatevoidprint_ifconstexpr(T0&&x,T&&...rest){ifconst

c++ - 为什么 std::bitset<5>{}[0] 不是 constexpr?

std::bitset有constexpr构造函数和constexproperator[]所以下面的代码编译成功:#includetypedefstd::bitsetBitSet;constexprBitSets1;static_assert(!s1[0]);购买为什么下面的代码没有?static_assert(BitSet{}[0]); 最佳答案 当您编写BitSet{}时,会创建一个类型为BitSet的临时对象。但是std::bitset的operator[]对于非常量对象,不是constexpr!在您的第一个示例中,s1隐含地

c++ - 带有字符串操作解决方法的 constexpr?

这previouslyansweredquestion解释了为什么我在下面发布的代码不起作用。我有一个后续问题:是否有一种概念上等效的解决方法,即实现编译时字符串连接,但以C++11实际支持的方式实现?使用std::string完全不是必需的。constexprstd::stringfoo(){returnstd::string("foo");}constexprstd::stringbar(){returnstd::string("bar");}constexprstd::stringfoobar(){returnfoo()+bar();} 最佳答案

C++ 初学者 : what is the point of using a variable by reference if using "const"?

我想知道这个函数声明中的逻辑:CMyException(conststd::string&Libelle=std::string(),...按引用使用变量有什么意义?通常,只要变量可能在内部被修改,您就会通过引用传递一个变量...因此,如果您使用关键字const,这意味着它永远不会被修改。这是矛盾的。谁能给我解释一下? 最佳答案 实际上引用是用来避免不必要的对象拷贝。现在,要理解为什么使用const,试试这个:std::string&x=std::string();//error编译会报错。这是因为表达式std::string()创

c++ - 使用 constexpr auto/char-array 变量观察到的不同行为

跟进这个问题Havingaconstexprstaticstringgivesalinkererror在问题中,这段代码无法编译:#includestructTest{staticconstexprchartext[]="Text";};intmain(){std::cout从评论来看,这段代码是可以编译的:#includestructTest{staticconstexprautotext="Text";};intmain(){std::cout我的问题是,为什么auto版本可以工作,而char版本的数组却不行?能否请您指出标准中允许使用第二个版本而不允许使用第一个版本的声明?我看了

c++ - 将 constexpr 数组复制到类中

假设我有一个类:classMyClass{chararray[12];public:MyClass(constchar*arr){for(intx=0;x是否可以使MyClass构造函数constexpr。棘手的部分是初始化新数组.... 最佳答案 我想(我希望)以下示例可以提供帮助。我将您的MyClass转换为模板类,其中模板参数是数组的维度(12);我希望这不是问题。应该适用于C++11和C++14#includetemplatestructrange{};templatestructrangeH{usingtype=typen

JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white space (\r, \n, \t) is

JSONparseerror:Illegalcharacter((CTRL-CHAR,code31)):onlyregularwhitespace(\r,\n,\t)isallowedbetweentokens;nestedexceptioniscom.fasterxml.jackson.core.JsonParseException:Illegalcharacter((CTRL-CHAR,code31)):onlyregularwhitespace(\r,\n,\t)isallowedbetweentokensat[Source:(org.springframework.util.Strea

c# - Windows Mobile 开发 : C++ or C# -- which one is better? 为什么?

在进行WindowsMobile开发时,我应该使用哪种语言?C#或C++或其他?为什么一个比另一个好? 最佳答案 这取决于您编写的代码。可以通过C#中的P/Invoke对操作系统进行native调用,但通过nativeC++进行广泛使用可能更容易。您还需要C++才能使用一些未被CompactFramework包装的硬件。大多数硬件(GPS、相机等)都可以通过CF获得。如果您使用的是WinMobile6.x设备,您可能最好使用C#。除了硬件之外,PocketOffice(POOM)的对象模型也可用于C#,因此您可以与其集成。值得注意的

C++ STL : Why is there no upper_bound equivalent that retrieves the greatest element smaller then a specific key?

通常,STL是为提高速度而构建的。然而,在map和set数据结构上只有upper_bound和lower_bound并且没有操作来检索具有小于输入键的最大键的条目k.为什么是这样?我知道我可以简单地做一个lower_bound并做一个--it检索它,但根据数据结构,立即搜索正确的条目可能比搜索另一个条目然后返回一步更有效。例如,std::map使用红黑树,即二叉搜索树。如果upper_bound返回的元素是大于根的最小元素,则--it必须回到根,查询O(logn)的额外成本。如果这是Java,我会接受设计决定。然而,STL是为实现最高速度而构建的,那么为什么要省略此操作?澄清:我不是在