小编tml*_*len的帖子

遍历C ++中的非常量变量

#include <initializer_list>

struct Obj {
    int i;
};

Obj a, b;

int main() {
    for(Obj& obj : {a, b}) {
        obj.i = 123;   
    }
}
Run Code Online (Sandbox Code Playgroud)

该代码无法编译,因为来自的值initializer_list {a, b}被当作const Obj&,并且不能绑定到非const引用obj

是否有一种简单的方法可以使类似的构造工作,即遍历像like abhere 这样的不同变量中的值。

c++ initializer-list

41
推荐指数
3
解决办法
2175
查看次数

最终用于C++中的优化?

class A {
public:
    virtual void f() = 0;
};

class B : public A {
public:
    void f() final override { };
};

int main() {
    B* b = new B();
    b->f();
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器是否仍需要执行v表查找b->f();,或者是否可以B::f()直接调用,因为它已被标记final

c++ virtual final c++11

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

错误C2679:二进制'>>':找不到哪个运算符采用'std :: string'类型的右手操作数(或者没有可接受的转换)

请不要与标题混淆,因为它已被某人询问,但不同的背景

Visual C++编译器(VS2008)中的以下代码未编译,而是抛出此异常:

std::ifstream input (fileName);   

while (input) {
  string s;
  input >> s;
  std::cout << s << std::endl;
};
Run Code Online (Sandbox Code Playgroud)

但是这个代码在cygwin g ++中编译得很好.有什么想法吗?

c++ cygwin compiler-errors visual-c++

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

C++类型后缀_t,_type或none

C++有时使用后缀_type上类型定义(例如std::vector<T>::value_type),有时也被_t(例如std::size_t),或没有后缀(正常的类,并且也像类型定义std::string这是真的std::basic_string<...>)

什么时候使用哪个名称有什么好的约定?

c++ stl coding-style

22
推荐指数
2
解决办法
4242
查看次数

OpenCV中矩阵中元素的总和?

我需要将矩阵中的所有元素相加.我用过这个功能

  sum(sum(A)); 
Run Code Online (Sandbox Code Playgroud)

在matlab中.哪个A是尺寸为300*360的矩阵.我想在OpenCV中实现相同的功能.我用过这样的东西.

  double s=cv::sum(cv::sum(A));
Run Code Online (Sandbox Code Playgroud)

但是有错误显示无法将标量转换为双倍.如何解决这个问题?

c++ matlab opencv image-processing

20
推荐指数
2
解决办法
5万
查看次数

使用swift的临时文件路径

如何在OS X上使用Swift/Cocoa获取唯一的临时文件路径?Cocoa似乎没有为此提供函数,只NSTemporaryDirectory()返回临时目录的路径.使用BSD mktemp函数需要一个可变的C字符串作为参数.

macos cocoa swift

18
推荐指数
5
解决办法
2万
查看次数

std :: vector在前向声明的类型上

以下代码似乎在Clang ++和GCC上正常工作:

#include <vector>

class A {
private:
    int i;
    std::vector<A> children;
public:
    A& add();
};

A& A::add() { children.emplace_back(); return children.back(); }

int main() {
    A a;
    A& a2 = a.add();
}
Run Code Online (Sandbox Code Playgroud)

std::vector<A>声明数据成员时,A仍然是不完整的类型.同样在使用std::vector<B>B只向前声明class B;.它应该工作,std::vector因为它只包含一个指针A.

这是保证工作还是未定义的行为?

c++ stl forward-declaration c++11 c++17

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

缓冲区填充了不同类型的数据,并严格别名

根据标准,在C++中始终是未定义的行为,例如,float*指向与a 相同的内存位置int*,然后从它们读/写.

在我的应用程序中,可以有一个填充32位整数元素的缓冲区,它被32位浮点元素覆盖.(它实际上包含一个图像的表示,它由GPU内核在多个阶段进行转换,但是也应该有一个主机实现执行相同的处理,以进行验证.)

该程序基本上这样做(不是实际的源代码):

void* buffer = allocate_buffer(); // properly aligned buffer

static_assert(sizeof(std::int32_t) == sizeof(float), "must have same size");
const std::int32_t* in = reinterpret_cast<const std::int32_t*>(buffer); 
float* out = reinterpret_cast<float*>(buffer); 
for(int i = 0; i < num_items; ++i)
   out[i] = transform(in[i]);
Run Code Online (Sandbox Code Playgroud)

有没有办法reinterpret_cast在C++标准中明确定义指针大小写,而不需要为整个缓冲区做额外的内存副本,或者额外的每个元素副本(例如std::bit_cast)?

c++ strict-aliasing c++11 c++14

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

特征对齐问题

文档中列出的Eigen的内存对齐问题是否仍然适用于C++ 11?似乎C++ 11已经能够正确地对齐堆栈上和堆上的对象,alignas并且std::allocator支持对齐.

memory-alignment eigen c++11 eigen3

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

朋友功能的使用声明

在C++ 11中,可以通过声明使外部(公共)可以访问私有基类的公共成员using.例如

class A {
private:
    int i = 2;
public:
    void f() { i = 3; }

    friend bool operator==(const A& l, const A& r) { return l.i == r.i; }
};

class B : private A {
public:
    using A::f;
};

int main() {
    B b, b2;
    b.f();
}
Run Code Online (Sandbox Code Playgroud)

b.f()因为using A::f在定义中是可能的B.

是否有可能编写一个类似的声明,它可以使友元函数的up-cast B&成为A&可能operator==(A&, A&),以便b == b2可以调用main()

c++ using friend c++11 c++14

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