8得票1回答
这个constexpr虚函数技巧违反了C++11/C++14的规则吗?

我最近在阅读C++文档时注意到,尽管字面类型不能具有虚成员,但这并不妨碍它们实现虚成员。或者至少这是我理解的。 以下是我正在使用的一些代码: #include <cassert> // Some forward declarations: enum class litera...

7得票1回答
为什么在GCC中允许使用带有std :: string的模板化constexpr?

为什么模板版本可以在gcc中编译?这是编译器的错误还是当与模板一起使用时实际有效?请有人给我解释一下。 在clang或其他在godbolt.org上使用的编译器上无法编译。 编译错误来自于在constexpr中使用了string和stringstream。 #include <io...

17得票2回答
静态常量获取器中,使用inline还是constexpr?

在下面的代码中,哪个函数可以为外部使用提供最佳优化?为什么?C++ 2011是否允许“Version 4”? 在下面的代码中,哪个函数可以为外部使用提供最佳优化?为什么?C++ 2011是否允许“Version 4”?template<unsigned int TDIM> cla...

35得票1回答
在constexpr上下文中使用带有consteval构造函数的new表达式

struct A { consteval A() {}; }; constexpr bool g() { auto a = new A; delete a; return true; } int main() { static_asse...

33得票6回答
为什么std :: algorithms不是constexpr的,哪些可以是?

为什么没有任何std :: algorithm方法是constexpr的?如果我正确理解了新的C++14规则,这些方法中的许多都可以是constexpr。例如,为什么std :: find不能是constexpr? static constexpr std::array<char, 4...

7得票2回答
为什么std::array的ConstexprIterator不是双向/随机访问迭代器?

我有一个适用于任意容器的库函数。基本上它打印元素。对于双向/随机访问容器,它会打印第一个和最后一个元素,对于单向容器只打印第一个元素。识别和使用双向访问取决于工作的--container.end()。这在C++17中对于std::array有效,但是在C++20中std::array有Cons...

11得票2回答
警告:函数使用了不带尾随返回类型的'auto'类型说明符。

以下代码会出现下面的警告。请问有人能解释一下为什么吗?(注意,这个代码本身并没有实际用途,因为我用int替换了我的类型以创建一个完整的示例)。 警告:'MaxEventSize()'函数使用了没有尾随返回类型的'auto'类型说明符[默认情况下启用] 思路是获取特定结构的最大大小(类型在i...

27得票1回答
最终,std::string会成为我们的编译时字符串吗?

许多开发者和库作者已经折腾编译时字符串有好几年了,因为标准(库)字符串std::string需要动态内存分配,而且不是constexpr。 所以我们有一堆关于如何正确处理编译时字符串的问题和博客文章: 在C++中方便地声明编译时字符串 如何在编译时在模板中连接编译时字符串? C++编译时字...

14得票1回答
在某些情况下允许从constexpr调用非constexpr函数

从那个问题而来:如何构建一个自定义宏,在用作constexpr(例如assert)时行为不同? 我想知道如果函数是有条件的,为什么可以调用非constexpr函数。void bla( ) { std::cout << "bla called!" << std:...

16得票2回答
空析构函数与字面值析构函数的区别

考虑以下代码:#include <iostream> class Test { public: constexpr Test(const int x) : _x(x) {} constexpr int get() const {return...