小编jot*_*tik的帖子

参数和参数之间有什么区别?

当口头谈论方法时,我永远不确定是否使用单词参数参数或其他东西.无论哪种方式,其他人都知道我的意思,但是什么是正确的,这些条款的历史是什么?

我是一名C#程序员,但我也想知道人们是否使用不同语言的不同术语.

根据记录,我是自学成才,没有计算机科学的背景.(请不要告诉我阅读Code Complete,因为我问这个是为了其他没有史蒂夫麦康奈尔精彩书籍的人的利益.)

摘要

普遍的共识似乎是在团队环境中交替使用这些术语是可以的.除非您定义精确的术语; 那么你也可以使用" 形式参数/参数"和" 实际参数/参数"来消除歧义.

language-agnostic parameters arguments terminology

661
推荐指数
21
解决办法
22万
查看次数

C++中的逻辑XOR运算符?

有这样的事吗?这是我第一次遇到它的实际需要,但我没有看到Stroustrup中列出的一个.我打算写:

// Detect when exactly one of A,B is equal to five.
return (A==5) ^^ (B==5);
Run Code Online (Sandbox Code Playgroud)

但是没有^^运营商.我可以在^这里使用bitwise 并得到正确的答案(无论机器表示真和假)?我从来没有拌&&&,或|||,所以我毫不犹豫地做到这一点与^^^.

我会更自在地编写自己的bool XOR(bool,bool)函数.

c++ operators logical-operators

274
推荐指数
9
解决办法
27万
查看次数

哪些Boost功能与C++ 11重叠?

几年前我把我的C++技能放在架子上,现在看来,当我再次需要它们时,景观已经改变了.

我们现在有了C++ 11,我的理解是它与许多Boost功能重叠.

是否存在这些重叠的摘要,哪些Boost库将成为遗产,推荐哪些C++ 11功能使用而不是增强哪些,哪些更好?

c++ boost c++11

188
推荐指数
2
解决办法
4万
查看次数

递归锁定(互斥锁)与非递归锁定(互斥锁)

POSIX允许互斥锁递归.这意味着同一个线程可以锁定相同的互斥锁两次并且不会死锁.当然它还需要解锁两次,否则没有其他线程可以获得互斥锁.并非所有支持pthread的系统都支持递归互斥锁,但如果它们想要符合POSIX,则必须使用.

其他API(更高级别的API)通常也提供互斥锁,通常称为锁定.一些系统/语言(例如Cocoa Objective-C)提供递归和非递归互斥体.有些语言也只提供一种或另一种语言.例如,在Java中,互斥锁总是递归的(同一个线程可能在同一个对象上"同步"两次).根据它们提供的其他线程功能,没有递归互斥体可能没有问题,因为它们可以很容易地自己编写(我已经在更简单的互斥/条件操作的基础上自己实现了递归互斥锁).

我真的不明白:什么是非递归互斥量有用?如果它锁定相同的互斥锁两次,为什么我想要一个线程死锁?即使是可以避免这种情况的高级语言(例如测试它是否会死锁并抛出异常)通常也不会这样做.他们会让线程陷入僵局.

这只适用于我意外锁定它两次并且只解锁一次的情况,并且在递归互斥锁的情况下,它会更难找到问题,所以相反我立即死锁以查看错误锁定出现在哪里?但是我不能在解锁时返回一个锁定计数器并且在某种情况下,我确定我释放了最后一个锁并且计数器不为零,我可以抛出异常或记录问题吗?或者是否有其他更有用的非递归互斥体用例我看不到?或者它可能只是性能,因为非递归互斥体可能比递归互斥体略快?但是,我对此进行了测试,差异确实不大.

multithreading mutex deadlock locking recursive-mutex

176
推荐指数
6
解决办法
11万
查看次数

内联变量如何工作?

在2016年奥卢ISO C++标准会议上,一项名为Inline Variables的提案被标准委员会投票选为C++ 17.

通俗地说,什么是内联变量,它们如何工作以及它们对什么有用?如何声明,定义和使用内联变量?

c++ c++17

106
推荐指数
3
解决办法
3万
查看次数

函数返回lambda表达式

我想知道是否可以在C++ 11中编写一个返回lambda函数的函数.当然一个问题是如何声明这样的功能.每个lambda都有一个类型,但是这种类型在C++中是不可表达的.我不认为这会奏效:

auto retFun() -> decltype ([](int x) -> int)
{
    return [](int x) { return x; }
}
Run Code Online (Sandbox Code Playgroud)

这不是:

int(int) retFun();
Run Code Online (Sandbox Code Playgroud)

我不知道从lambdas到函数指针或类似函数的任何自动转换.手工制作函数对象并返回它的唯一解决方案是什么?

c++ lambda function c++11

85
推荐指数
4
解决办法
3万
查看次数

保证副本省略如何运作?

在2016年奥卢ISO C++标准会议上,标准委员会将一项名为" 保证副本省略"的提案通过简化的价值类别投票进入C++ 17.

保证副本省略如何运作?是否涵盖了某些已经允许复制省略的情况,或者是否需要更改代码来保证复制省略?

c++ copy-elision c++17

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

std :: ignore with structured bindings?

序幕:

std::tuple<int, int, int> f();
std::tuple<int, int, float, int> g();
Run Code Online (Sandbox Code Playgroud)

C++ 1z将引入结构化绑定的语法,这样可以编写代替

int a, b, c;
std::tie(a, b, c) = f();
Run Code Online (Sandbox Code Playgroud)

就像是

auto [a, b, c] = f();
Run Code Online (Sandbox Code Playgroud)

但是,std::tie也允许指定std::ignore忽略某些组件,例如:

std::tie(a, b, std::ignore, c) = g();
Run Code Online (Sandbox Code Playgroud)

是否可以使用新的结构化绑定语法执行类似的操作?它会如何工作?

c++ language-lawyer c++17

61
推荐指数
4
解决办法
8767
查看次数

GCC无法区分operator ++()和operator ++(int)

template <typename CRTP>
struct Pre {
    CRTP & operator++();
};

template <typename CRTP>
struct Post {
    CRTP operator++(int);
};

struct Derived
    : Pre<Derived>
    , Post<Derived>
{};

int main() {
    Derived d;
    d++;
    ++d;
}
Run Code Online (Sandbox Code Playgroud)

我从GCC得到这些错误:

<source>: In function 'int main()':
<source>:18:10: error: request for member 'operator++' is ambiguous
        d++;
        ^~
<source>:8:14: note: candidates are: CRTP Post<CRTP>::operator++(int) [with CRTP = Derived]
        CRTP operator++(int);
            ^~~~~~~~
<source>:3:16: note:                 CRTP& Pre<CRTP>::operator++() [with CRTP = Derived]
        CRTP & operator++();
                ^~~~~~~~
<source>:19:11: error: request for member …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading multiple-inheritance ambiguous

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

如何使用JavaScript获取上一页网址?

如何在JavaScript中获取上一页的URL?

说,我从页面A转到B,并使用浏览器后退按钮返回到页面A.

我试过用history.previous,但我无法让它工作.

javascript

59
推荐指数
3
解决办法
16万
查看次数