小编Han*_*IAO的帖子

c++:允许临时对象调用非常量成员函数的设计理念是什么?

我搜索堆栈溢出,人们说修改临时对象是愚蠢的,因此不允许将临时对象绑定到非常量左值引用,就像您不能将临时对象传递给具有非常量左值引用的函数一样。

那么为什么允许临时对象调用有可能修改对象并做“愚蠢”事情的非常量成员函数呢?你可能会说,“哈,这是允许的,因为我们想为程序员提供一些灵活性,让他们做一些实际上并不那么愚蠢的“愚蠢”的事情”,这就是我很难买的原因,因为如果我买这个借口,我认为“将临时绑定到非常量左值引用”可以使用相同的原因来证明是合理的。

谢谢!我在这里几乎找不到任何相关问题。他们只是告诉我这是一个例外,但为什么我们允许这个例外呢?

c++ constants temporary member-functions

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

在 Python 中解压缩字典时,单(不是双)星号 * 是什么意思?

任何人都可以解释使用单星号或双星号打开字典时的区别吗?在函数参数中使用时,您可以提及它们的区别,前提是它们在这里相关,我不这么认为。

但是,可能存在一些相关性,因为它们共享相同的星号语法。

def foo(a,b)
    return a+b

tmp = {1:2,3:4}
foo(*tmp)        #you get 4
foo(**tmp)       #typeError: keyword should be string. Why it bothers to check the type of keyword? 
Run Code Online (Sandbox Code Playgroud)

此外,为什么在这种情况下作为函数参数传递时,字典的键不允许是非字符串?有任何例外吗?他们为什么这样设计Python,是因为编译器无法推断出这里的类型还是什么?

谢谢!

python dictionary iterable-unpacking

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

复制初始化:为什么即使关闭copy-elision也没有调用移动或复制构造函数?

我的问题不同,因为我可能"知道"复制省略.我正在学习复制初始化.但是,以下代码使我感到困惑,因为我已经使用-fno-elide-contructors -O0选项关闭了copy-elision .

#include <iostream>
using namespace std;
class test{
public :
    test(int a_, int b_) : a{a_}, b{b_} {}
    test(const test& other)
    {
        cout << "copy constructor" << endl;
    }
    test& operator=(const test& other)
    {
        cout << "copy assignment" << endl;
        return *this;
    }
    test(test&& other)
    {
        cout << "move constructor" << endl;
    }
    test& operator=(test&& other)
    {
        cout <<"move assignment" << endl;
        return *this;
    }

private :
    int a;
    int b;
};

test show_elide_constructors()
{
    return …
Run Code Online (Sandbox Code Playgroud)

c++ initialization implicit-conversion copy-initialization copy-elision

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

发送条件变量信号时必须保持锁定吗?

好的。此处的示例是使用 c 中的 pthread lib 提供的。

在教科书中,我遇到了以下代码:

//for thread 2
pthread_mutex_lock(&lock);
should_wake_up = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&lock);
Run Code Online (Sandbox Code Playgroud)

这段代码运行良好。我只是想知道以下代码是否也有效?

//for thread 2
pthread_mutex_lock(&lock);
should_wake_up = 1;
pthread_mutex_unlock(&lock);
pthread_cond_signal(&cond);//signal the conditional variable but the lock is not held
Run Code Online (Sandbox Code Playgroud)

以下代码的优缺点是什么?

附注。假设协作线程有代码:

//for thread 1
pthread_mutex_lock(&lock);
while(!should_wake_up)
    pthread_cond_wait(&cond, &lock);
pthead_mutex_unlock(&lock);
Run Code Online (Sandbox Code Playgroud)

PS2。我遇到了其他一些问题,它指出如果我们不希望信号丢失,我们必须使用锁来确保在持有锁时不能更改关联的谓词(在这种情况下,是 should_wake_up)线程 1. 在这种情况下,这似乎不是问题。链接到帖子:[1]:在不持有锁的情况下在条件变量上发出信号。我认为他的问题是他忘记了锁定。但我的问题是不同的。

multithreading pthreads

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