小编Rét*_*roX的帖子

C++ 11 - constexpr函数中的static_assert?

如何static_assert在一个constexpr函数中正确执行?例如:

constexpr int do_something(int x)
{
  static_assert(x > 0, "x must be > 0");
  return x + 5;
}
Run Code Online (Sandbox Code Playgroud)

这不是有效的C++ 11代码,因为constexpr函数必须只包含return语句.我不认为该标准有例外,但GCC 4.7不允许我编译这段代码.

c++ static-assert constexpr c++11

53
推荐指数
2
解决办法
1万
查看次数

内联与constexpr?

使用新的C++ 11标准,何时应该在inline关键字上使用constexpr关键字?constexpr关键字是否提供任何额外的优化inline,或仅仅断言必须在编译时计算事物?

为什么constexpr在调用不稳定的某些情况下在GCC 上工作,例如调用foo(x)constexpr变量?这是GCC中的错误还是它实际上是标准的一部分?

c++ optimization inline constexpr c++11

28
推荐指数
2
解决办法
7074
查看次数

C++中的四倍精度(GCC)

就在最近,GCC 4.6.0与libquadmath一起发布.不幸的是,GNU支持Fortran,但不支持C或C++(所有包含的都是.so).我还没有找到在C++中使用这些新功能的方法,但GNU C确实支持__float128保证四倍精度浮点数的类型.GNU C似乎不支持libquadmath中的数学函数,例如 fabsq(绝对值,q是quad的后缀).

有没有办法让这些函数在C++中运行,还是有一些替代库可以用于数学函数__float128?在GCC中使用四倍精度浮子的最佳方法是什么?现在,我可以添加,减去和相乘它们,但这对我来说没用,考虑到我无法将它们转换为字符串或使用诸如truncqfabsq创建我自己的字符串函数之类的函数.

c++ floating-point gcc quadruple-precision

13
推荐指数
1
解决办法
2万
查看次数

MinGW和常规GCC之间的区别?

在MinGW的SourceForge页面上,您可以下载GCC 4.5.2,这是最新版本.在GNU镜像上,您可以下载GCC 4.6源代码并使用其中一个可能的窗口目标进行编译:

i[3456789]86-w64-mingw*
i[3456789]86-*-mingw*
x86_64-*-mingw*
Run Code Online (Sandbox Code Playgroud)

使用其中一个目标与MinGW的传统GCC有区别吗?使用常规GCC是否有意义,因为它有更新的版本,或者等到MinGW的最新GCC发布后会更有意义吗?

gcc mingw

10
推荐指数
1
解决办法
2万
查看次数

C++ 0x元组向后存储元素

经过一番调查后,我发现C++ 0x将元素向后存储在元组中.

例如,请使用以下代码:

std::tuple<char, char, char> x('\0', 'b', 'a');
char* y = (char*)&x;
std::cout << sizeof(x) << std::endl;
std::cout << y << std::endl;
Run Code Online (Sandbox Code Playgroud)

使用GCC 4.5.2编译时,我得到以下输出:

3
ab
Run Code Online (Sandbox Code Playgroud)

这最初困惑了我.为什么数据会向后存储?在通过GNU无意识混淆的标头搜索之后,我注意到实现类似于:

template<typename head, typename... tail> class tuple<head, tail...> : public tuple<tail...>
{
  head value;
  ...
};
Run Code Online (Sandbox Code Playgroud)

因为基类包含最后一个元素,所以下一个派生类包含倒数第二个,等等,模板参数的实际顺序是相反的.

当我第一次进入元组时,我认为我可以将它们用于类似函数glInterleavedArrays(),它将顶点数据数组设置为颜色,纹理坐标,法线和点的元组.当然,如果我创建一个元组数组,这些数据必须反向输入,如果你碰巧忘记按正确的顺序放置参数,这可能会导致非常奇怪的错误.

那么这样的事呢?

template<typename... head, typename tail> class tuple<head..., tail> : public tuple<head...>
{
  tail value;
  ...
};
Run Code Online (Sandbox Code Playgroud)

根据GCC 4.5.2:

std::tuple<char, char, char> x('\0', 'b', 'a');
char* y = (char*)&x;
std::cout << sizeof(x) << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ memory tuples c++11 stdtuple

6
推荐指数
2
解决办法
933
查看次数

C++ 11中类型的字节转换副本?

C++ 11标准保证逐字节副本始终对POD类型有效.但是某些琐碎的类型呢?

这是一个例子:

struct trivial
{
  int x;
  int y;
  trivial(int i) : x(2 * i) { std::cout << "Constructed." << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)

如果我要复制这个结构,逐字节,是否保证正确复制,即使它在技术上不是POD?是什么时候绘制的是什么时候不能对对象进行字节复制?

c++ language-lawyer standard-layout c++11

5
推荐指数
2
解决办法
786
查看次数

C++ 11 - 区分右值指针

如何将变量区分为编译器构造的字符串?

例如,虽然右值"Hello, World"是类型const char*.const char*本身并不意味着指针不能改变.一个char* const指针不能改变,但是这不是什么编译器构成.

这是否意味着,对于任何拥有a的容器,const char*数据应该通过C++的移动语义之外的方式复制?有没有办法只移动编译器构造的字符串并保留所有其他字符串?

例如,在GCC 4.5.2,它返回类型的方法int,而不是int&被当作返回int&&.我不知道实际的标准是否应该是这样的,但这就是海湾合作委员会暂时做的事情.

编辑:澄清一下,我的意思是应该复制指针指向的实际内存.这意味着必须分配新内存,并且应将指针中的数据复制到新位置.

c++ string rvalue-reference move-semantics c++11

2
推荐指数
1
解决办法
1930
查看次数

PHP - 完成尚未关闭的HTML标记?

假设我输入的内容如下:

<strong>bunch <em>of</em> <span>random text
Run Code Online (Sandbox Code Playgroud)

我希望代码能够获取此字符串并将其转换为:

<strong>bunch <em>of</em> <span>random text</span></strong>
Run Code Online (Sandbox Code Playgroud)

html php string formatting

1
推荐指数
1
解决办法
138
查看次数