小编Pub*_*bby的帖子

用户定义的文字参数不是constexpr?

我正在测试用户定义的文字.我想让_fac返回数字的阶乘.

让它调用一个constexpr函数是有效的,但它不允许我用模板做,因为编译器抱怨参数不是也不可能constexpr.

我对此感到困惑 - 不是文字常量表达式吗?该55_fac始终是一个文字,可以在编译时计算,所以为什么我不能用它作为这样?

第一种方法:

constexpr int factorial_function(int x) {
  return (x > 0) ? x * factorial_function(x - 1) : 1;
}

constexpr int operator "" _fac(unsigned long long x) {
  return factorial_function(x); // this works
}
Run Code Online (Sandbox Code Playgroud)

第二种方法:

template <int N> struct factorial_template {
  static const unsigned int value = N * factorial_template<N - 1>::value;
};
template <> struct factorial_template<0> {
  static const unsigned int value = 1; …
Run Code Online (Sandbox Code Playgroud)

c++ user-defined-literals constexpr c++11

23
推荐指数
2
解决办法
3908
查看次数

String.Format(...)中的Boxing和Unboxing ......以下是合理化的吗?

我正在做一些关于装箱/拆箱的阅读,事实证明,如果你做一个普​​通的String.Format()你在你的object[]参数列表中有一个值类型,它将导致一个装箱操作.例如,如果您正在尝试打印出整数的值并执行此操作string.Format("My value is {0}",myVal),则会将其粘贴myVal int到一个框中并在其ToString上运行该函数.

浏览,我发现了这篇文章.

看来你可以简单地通过.ToString在将值传递给string.Format函数之前执行值类型来避免拳击惩罚:string.Format("My value is {0}",myVal.ToString())

  1. 这是真的吗?我倾向于相信作者的证据.
  2. 如果这是真的,为什么编译器不能简单地为你做这个?也许它自2006年以来发生了变化?有人知道吗?(我没有时间/经验来进行整个IL分析)

.net c# boxing

23
推荐指数
4
解决办法
4192
查看次数

FFI可以处理数组吗?如果是这样,怎么样?

我很确定可以通过FFI发送数组,但我找不到任何例子.例如,我有一个Haskell数组,我发送给一个int foo(int*)函数,或者我有一个C数组int bar[64];,我发送给Haskell.

理想情况下,我想要最有效的方式 - 我不希望任何堆分配或不必要的复制.另外,如果我可以在Haskell和C中使用Haskell的未装箱数组,那将是很好的.那么这样做的方法是什么?

arrays haskell ffi

21
推荐指数
2
解决办法
3234
查看次数

嵌套结构尽管与全局结构完全相同但仍会破坏constexpr

我遇到以下代码时遇到问题:

template<typename T>
constexpr int get(T vec) {
  return vec.get();
}

struct coord {
  constexpr int get() const { return x; }
  int x;
};

struct foo {
    struct coord2 {
      constexpr int get() const { return x; }
      int x;
    };
    constexpr static coord f = { 5 };
    constexpr static int g = get(f); // works

    constexpr static coord2 h = { 5 };
    constexpr static int i = get(h); // doesn't work
};

constexpr coord foo::f;
constexpr …
Run Code Online (Sandbox Code Playgroud)

c++ constexpr c++11

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

OpenGL VBO更新数据

我必须绘制一个包含几千个顶点的缓冲区.我正在使用vbo来存储数据.

我知道我将不得不多次更新VBO - 但一次只能处理一小部分.

所以我想知道这样做的最佳方法是:

  1. 将VBO拆分为较小的VBO(保持300个顶点)然后用1个调用更新单个VBO?
  2. 一个大的VBO并使用大量glBufferSubData()电话?
  3. 使用glMapBuffer()和一个大的VBO?

c++ opengl buffer vbo

15
推荐指数
2
解决办法
8999
查看次数

为什么is_lock_free是成员函数?

为什么is_lock_free需要一个实例(它是一个成员函数)的原因是什么?为什么不是类型的元函数,还是静态constexpr成员函数?

我正在寻找一个必要的实际情况.

c++ atomic std c++11

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

语法错误,意外'\n',期待tCOLON2或'['或'.'

我在一个简单的测试应用程序上遇到以下错误,我正在努力学习Rails.

syntax error, unexpected '\n', expecting tCOLON2 or '[' or '.'
Run Code Online (Sandbox Code Playgroud)

它似乎告诉我有一个意外中断,但我无法弄清楚我的代码有什么问题:

#app/views/quotations/index.html.erb
<% title "Quotations" %>

<table>
  <tr>
    <th>Quote Text</th>
    <th>Author</th>
    <th>Quote type</th>
    <th>Category</th>
    <th>Tags</th>
  </tr>
  <% for @quotations.each do |quotation| %>
    <tr>
      <td><%= quotation.quote_text %></td>
      <td><%= quotation.author %></td>
      <td><%= quotation.quote_type %></td>
      <td><%= quotation.category %></td>
      <td><%= quotation.tags %></td>
      <td><%= link_to "Show", [@user, quotation] %></td>
      <td><%= link_to "Edit", edit_user_quotation_path(@user, quotation) %></td>
      <td><%= link_to "Destroy", [@user, quotation], :confirm => 'Are you sure?', :method => :delete %></td>
    </tr>
  <% end %>
</table> …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails syntax-error

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

如何使用自定义类声明数组?

我正在尝试使用自定义类声明一个数组.当我向类中添加构造函数时,我的编译器抱怨"没有用于初始化name [3]的匹配构造函数".

这是我的计划:

#include <iostream>

using namespace std;

class name {
  public:
    string first;
    string last;

  name(string a, string b){
    first = a;
    last = b;
  }
};

int main (int argc, const char * argv[])
{

  const int howManyNames = 3;

  name someName[howManyNames];

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能实现这一目标,我做错了什么?

c++ arrays constructor

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

is_standard_layout如何有用?

据我所知,标准布局允许三件事:

  • 空基类优化
  • 向后兼容C与某些指针转换
  • 使用offsetof

现在,包含在库中的是is_standard_layout谓词元函数,但我在通用代码中看不到它的用处,因为我上面列出的那些C特性似乎极少需要检查通用代码.我唯一能想到的是在里面使用它static_assert,但这只是为了使代码更健壮而且不是必需的.

怎么is_standard_layout有用?有没有没有它的东西是不可能的,因此需要它在标准库中?

c++ standard-layout c++11

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

在调用析构函数之前,对象的生命周期结束了吗?

我不明白这个:

3.8/1"类型T的对象的生命周期在以下情况下结束: - 如果T是具有非平凡析构函数(12.4)的类类型,则析构函数调用开始,或者 - 对象占用的存储器被重用或释放. "

如果生命周期在析构函数启动之前结束,那是不是意味着访问析构函数中的成员是未定义的行为?

我也看到了这句话:

12.7"对于具有非平凡析构函数的对象,在析构函数完成执行后引用该对象的任何非静态成员或基类会导致未定义的行为."

但它并不清楚析构函数中允许的内容.

c++ destructor object-lifetime language-lawyer

11
推荐指数
3
解决办法
2126
查看次数