小编mas*_*oud的帖子

寻找成员函数的恒定性

如何检测成员函数是否具有const修饰符?

考虑一下代码

struct A {
  int member();
  int member() const;
};

typedef int (A::*PtrToMember)();
typedef int (A::*PtrToConstMember)() const;
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西:

std::is_const<PtrToMember>::value // evaluating to false
std::is_const<PtrToConstMember>::value // evaluating to true 
Run Code Online (Sandbox Code Playgroud)

c++ const member-functions type-traits

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

为std :: reference_wrapper赋值

我们如何为包裹的项目赋值std::reference_wrapper

int a[] = {0, 1, 2, 3, 4};

std::vector <std::reference_wrapper<int>> v(a, a+5);

v[0] = 1234;  // Error, can not assign value !
Run Code Online (Sandbox Code Playgroud)

根据错误,删除直接分配:

错误:使用已删除的函数'std :: reference_wrapper <_Tp> :: reference_wrapper(_Tp &&)[with _Tp = int]'

c++ c++11

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

使用std :: map <t1,t2> :: erase(迭代器位置)?

我在cplusplus.com读到,std::map通过将迭代器作为参数传递来删除a中元素的操作是常量时间.

如果我没有错(如果我是,请纠正我)迭代器基本上是指向地图中元素的指针,++运算符只返回当前元素的有序后继,我猜这是如何在遍历时实现排序结果std::map.

现在如果地图是一棵红黑树,不应该删除一个元素(使用它的地址)是对数时间操作,我不知道他们是如何在恒定时间内完成的(除非存在高度内存浪费的替代方法) .

c++ algorithm stl red-black-tree data-structures

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

什么是"悬挂参考"和"一般保护故障"?

当我研究一些与内存泄漏相关的东西时,我偶然发现了这个问题.

int* Function()

{

   int arrays[10];

     /* Some code here */

   return &(arrays[0]);

}
Run Code Online (Sandbox Code Playgroud)

作者说上面的代码是有效的,但是返回的内存将被你调用的下一个函数重用,因此相同的内存将用于两个目的.这被称为"悬挂参考"并且可能导致可怕的间歇性故障,或者是老式的"一般保护故障".

如果有人能解释什么是"悬挂参考"和"一般保护错误",那将是很好的

c memory memory-leaks

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

带有接收器的boost_log示例无法编译

我正在考虑将boost_log用于一个项目,并且在开始时我遇到了以下问题.

我发现的Boost日志示例:http://www.boost.org/doc/libs/1_54_0/libs/log/example/doc/tutorial_file.cpp无法编译.其他更简单的例子(没有接收器)我编译没有问题.

g++ -std=c++11 boost_log_sinks.cpp -DBOOST_LOG_DYN_LINK -lboost_log -lpthread
Run Code Online (Sandbox Code Playgroud)

/ usr/bin/ld:/tmp/ccApJdsi.o:对符号'_ZN5boost6detail12get_tss_dataEPKv'的未定义引用//usr/lib/x86_64-linux-gnu/libboost_thread.so.1.54.0:添加符号时出错:命令行中缺少DSO collect2:错误:ld返回1退出状态

我正在研究Ubuntu14.04我的g ++版本是g ++(Ubuntu 4.8.2-19ubuntu1)4.8.2

有人知道为什么会这样吗?

c++ linux boost g++ c++11

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

C++:令人困惑的声明语义

在尝试了Perl和一点C之后,我正在尝试学习C++,并且我已经陷入了细节和陷阱.考虑一下: -

int x = 1;
{ 
  int x = x; // garbage value of x
}
int const arr = 3;
{ 
  int arr[arr]; // i am told this is perfectly valid and declares an array of 3 ints !! 
} 
Run Code Online (Sandbox Code Playgroud)

嗯,为什么区别?

澄清:使用相同的名称在一种情况下有效,在另一种情况下无效.

c++ declaration semantics

8
推荐指数
2
解决办法
446
查看次数

返回无效的引用

有时当我用C++编程时,我希望undefined每个变量都有一个像Javascript!的值.例如,当我为数组的越界元素返回一个值时,返回an undefined而不是抛出异常是有用的,或者:

template <typename T, int SIZE>
class MyArray
{
  T arr[SIZE];
  static T badref;
public:
  T &operator[](int i)
  {
    if (i >=0 && i < SIZE)
      return arr[i];
    else
      throw std::string("OUT-OF-BOUNDS"); // or: return badref; !!
  }
};
Run Code Online (Sandbox Code Playgroud)

另一个脏(在我看来)选项是将pre-defind变量的引用作为坏引用变量返回.我知道我们不能null为参考变量分配或类似的东西.

是否有另一个格式良好的模式返回一个引用,其中调用者能够找出返回的值无效?

编辑:我不是故意的pointer

c++

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

说变量和常量是数据类型的对象在技术上是否正确?

可以说变量和常量是数据类型的对象吗?

我想知道对此有什么正确的解释

int a;

float f;
Run Code Online (Sandbox Code Playgroud)

在这里,我们可以说a是类型的对象int,并f为类型的对象float

c c++

8
推荐指数
2
解决办法
266
查看次数

一般最小和最大 - C++

写一般的最小函数,我想到了两个问题.代码适用于任何输入类型和不同的参数号:

namespace xyz
{

template <typename T1, typename T2>
auto min(const T1 &a, const T2 &b) -> decltype(a+b)
{
    return a < b ? a : b;
}

template <typename T1, typename T2, typename ... Args>
auto min(const T1 &a, const T2 &b, Args ... args) -> decltype(a+b)
{
    return min(min(a, b), args...);
}

}

int main()
{
    cout << xyz::min(4, 5.8f, 3, 1.8, 3, 1.1, 9) << endl;
    //                   ^        ^           ^
    //                   |        |           |
    //                 float    double …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

8
推荐指数
2
解决办法
1286
查看次数

为什么Qt会拒绝有效的JSON?

使用Qt-5.0,我有这个JSON字符串

{"type":"FILE"}
Run Code Online (Sandbox Code Playgroud)

我希望fromBinaryData接受.toLocal8Bit()字符串作为有效格式,但事实并非如此.

QString j = "{\"type\":\"FILE\"}";

auto doc = QJsonDocument::fromBinaryData(j.toLocal8Bit());

doc.isNull() // It's true, means the entry is not valid
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

c++ qt json

8
推荐指数
2
解决办法
1801
查看次数