小编use*_*020的帖子

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

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

通过值或const引用?

一组很好的规则来确定是否通过值或const引用传递

  • 如果函数打算将参数更改为副作用,请使用非const引用.
  • 如果函数不修改其参数且参数是基本类型,则按值取值.
  • 否则通过const引用获取它,除非在下列情况下:如果函数需要复制const引用,请按值取值.

对于构造函数如下,如何确定它?

class A
{
public:
    A(string str) : mStr(str) {} // here which is better, 
                                 // pass by value or const reference?

    void setString(string str)  { mStr = str; } // how about here?

private:
    string mStr;
};
Run Code Online (Sandbox Code Playgroud)

c++ parameter-passing

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

如何在Qt中的另一个类中发出信号?

我们可以通过emit signal_a()类似方式在类中定义信号的类中发出信号

class A
{
signals:
    signal_a();

public:
    void fun()
    {
        do_something();
        emit signal_a();
        do_something();
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,如何在Qt中的另一个类中发出信号?例如

class B
{
public:
    void fun()
    {
        do_something();
        (*a) emit signal_a(); // ???
        do_something();
    }

A* a;
};
Run Code Online (Sandbox Code Playgroud)

c++ qt signals

7
推荐指数
2
解决办法
7360
查看次数

如何使用通用函数指针作为模板参数?

是否可以使用通用函数指针作为模板参数?函数指针模板可以接受自由函数,成员函数和lambda函数.为简单起见,假设函数只有一个参数,比如

template<class ArgumentT, class ReturnT, function* f>
struct A
{
   // f is used somewhere.
};
Run Code Online (Sandbox Code Playgroud)

c++ templates function-pointers

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

返回间接类型对象会影响性能吗?

我有一个内联函数

string myFunction() { return ""; }
Run Code Online (Sandbox Code Playgroud)

和....相比

string myFunction() { return string(); }
Run Code Online (Sandbox Code Playgroud)

它有性能牺牲吗?

使用std :: string和QString在VC2012版本上测试它(虽然在QString上,两者返回不同的结果:感谢DaoWen).两者都显示第二个版本比第一个版本快3倍.感谢您的所有答案和评论.测试代码附在下面

#include <iostream>
#include <string>
#include <ctime>
using namespace std;

inline string fa() { return ""; }
inline string fb() { return string(); }

int main()
{
    int N = 500000000;
    {
        clock_t begin = clock();
        for (int i = 0; i < N; ++i)
            fa();
        clock_t end = clock();
        double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC;
        cout << "fa: …
Run Code Online (Sandbox Code Playgroud)

c++

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

如何返回可变参数模板的最后一种类型?

例如

template<typename... Ts>
LastTypeOfTs f();
Run Code Online (Sandbox Code Playgroud)

如何返回最后一种可变参数模板?

c++ variadic-templates c++11

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

三元运算的结果(类型)是什么?

三元操作是否返回副本或引用?

我检查了以下代码

vector<int> v0 = { 1, 2 };
vector<int> v1 = { 3 };

vector<int>& v = true ? v0 : v1;
v.clear(); // v0 will be cleared also
Run Code Online (Sandbox Code Playgroud)

我认为三元操作会返回一份副本v0.然后把它传递给v.因此v,v0具有不同的数据存储.测试没有显示出来.

谢谢,Kerrek SB!我添加了一个"应该不编译"的例子(感谢WhiZTiM!)来说明这一点.

vector<int>& v = true ? v0 : vector<int>{3};
v.clear(); // v0 will not be cleared
Run Code Online (Sandbox Code Playgroud)

c++ ternary-operator

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

如何初始化静态向量成员?

例如

struct A
{
    static vector<int> s;
};

vector<int> A::s = {1, 2, 3};
Run Code Online (Sandbox Code Playgroud)

但是,我的编译器不支持初始化列表.有什么办法可以轻松实现吗?lambda函数在这里有用吗?

c++ lambda static

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

如何获得指针类型的指向类型?

我有一个指针类型Ptr.它可能是T*,unique_ptr,shared_ptr或其他.如何在编译时获取其尖头类型?我尝试以下但失败了

template<class Ptr>
void f()
{
    typedef decltype(*Ptr()) T; // give unexpected results
}
Run Code Online (Sandbox Code Playgroud)

以下删除的答案非常有效.

typedef typename std::remove_reference<decltype(*std::declval<Ptr>())>::type T;
Run Code Online (Sandbox Code Playgroud)

c++ type-traits

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