小编gct*_*gct的帖子

C++ 11是否使用移动语义来进行复制到分配优化?

假设我有一个名为Foo的类,它定义了合适的移动构造函数/赋值运算符.给定以下伪代码:

Foo some_func(Foo var) { 
    <update var>
    return var;
}

int main() { 
    Foo var;
    var = some_func(var);
}
Run Code Online (Sandbox Code Playgroud)

将var传递给some_func时,C++ 11会自动使用移动语义,并再次重新分配给var,因为var的原始值会被销毁吗?我认为这将是一个安全的优化,它可以让你编写与传递引用/指针一样快的纯函数.如果做不到,为什么不呢?我知道它可以用std :: move强制,但如果是自动的话它会很酷.

c++ c++11

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

在C++中交换未初始化的成员是否安全?

我正在使用哈希表,并且我有一个保存我的键值的桶类型,所以我可以将它们保存在联合中并保持未初始化以避免为它们要求DefaultConstructible:

template <class K, class V>
struct bucket {
     bucket() : hash(SENTINEL) {}
     bucket(uint64_t hash, K&& k, V&& v) 
       : hash(hash), key(std::forward(k)), val(std::forward(v)) {}

     <copy constructors>

    ~bucket() { 
         if (hash != SENTINEL) {
             key.~K();
             val.~V();
         }
      }

     uint64_t hash;
     union { K key; }
     union { V key; }
};
Run Code Online (Sandbox Code Playgroud)

那么,我的问题就像是=运算符,我通常会用复制和交换的习语来编写:

bucket& operator =(bucket other) {
     using std::swap;
     swap(hash, other,hash);
     swap(key,  other.key);
     swap(val,  other.val);
}
Run Code Online (Sandbox Code Playgroud)

这是否仍然安全,即使使用了楔形键和val?

c++

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

有没有办法找回在Prototype中使用Event.observe注册的匿名事件处理程序?

与遗留代码接口,我有这样的东西:

Event.observe(some_form, 'submit', [some anonymous function])
Run Code Online (Sandbox Code Playgroud)

我想抓住那个匿名事件处理程序,在Prototype中有一个简单的方法吗?

javascript events prototypejs

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

GDB中的0x2e2e2e2e回溯?

我有一个SIGSEGV我试图在我的代码中跟踪,但我从GDB中得到这样奇怪的回溯:

#1  0x00407d15 in print_banner (msg=0x2e2e2e2e <Address 0x2e2e2e2e out of bounds>)
    at ../include/test_util.hh:20
#2  0x2e2e2e2e in ?? ()
#3  0x2e2e2e2e in ?? ()
#4  0x2e2e2e2e in ?? ()
#5  0x2e2e2e2e in ?? ()
#6  0x2e2e2e2e in ?? ()
#7  0x2e2e2e2e in ?? ()
#8  0x2e2e2e2e in ?? ()
#9  0x2e2e2e2e in ?? ()
#10 0x2e2e2e2e in ?? ()
#11 0x2e2e2e2e in ?? ()
#12 0x2e2e2e2e in ?? ()
#13 0x2e2e2e2e in ?? ()
#14 0x2e2e2e2e in ?? ()
#15 0x2e2e2e2e …
Run Code Online (Sandbox Code Playgroud)

c++ gdb

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

将设备内存中的值作为 CUDA 中的内核参数传递

我正在编写一个 CUDA 应用程序,其中有一个步骤是计算某些复值输入数据的方差,然后使用该方差对数据进行阈值处理。我有一个为我计算方差的缩减内核,但我不确定是否必须将值拉回主机以将其传递给阈值内核。

有没有办法直接从设备内存传递值?

cuda

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

一种有效的方法来计算浮点后的下一个更高的整数?

出乎意料的是,我找不到关于此的简单参考,我想计算一下:

float x = /*...*/;
float next = nextint(x);
Run Code Online (Sandbox Code Playgroud)

其中next严格大于x(即,如果x是整数,则返回下一个更高的整数)。理想情况下没有分支。

c c++

-4
推荐指数
1
解决办法
108
查看次数

标签 统计

c++ ×4

c ×1

c++11 ×1

cuda ×1

events ×1

gdb ×1

javascript ×1

prototypejs ×1