小编hov*_*ovo的帖子

模糊的C++运算符重载

我有以下代码:

#include <iostream>

using namespace std;

ostream& f(ostream& os) {
    return os << "hi";
}

int main() {
    cout << "hello " << f << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不知何故,这是有效的 - 输出是"你好".这是如何被编译器解释的?我不明白如何将函数插入到流中.

c++ operator-overloading

26
推荐指数
2
解决办法
1099
查看次数

使用std :: function和lambda参数进行分段错误

你能解释为什么这段代码崩溃了吗?我期望输出"a",但我得到分段错误.

#include <functional>
#include <iostream>
#include <vector>
#include <string>


using namespace std;

struct MyStruct {
  vector<string> a;
  vector<string> b;
};

void out_data(const MyStruct& my_struct, const std::function<const vector<string>&(const MyStruct&)> getter) {
  cout << getter(my_struct)[0] << endl;
}

int main(int argc, char** argv)
{
  MyStruct my_struct;
  my_struct.a.push_back("a");
  my_struct.b.push_back("b");
  out_data(my_struct, [](const MyStruct& in) {return in.a;});
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ lambda function c++11

11
推荐指数
2
解决办法
2125
查看次数

:: tolower vs std :: tolower的区别

我有

using namespace std;
vector<char> tmp;
tmp.push_back(val);
...
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试

transform(tmp.begin(), tmp.end(), tmp.begin(), std::tolower);
Run Code Online (Sandbox Code Playgroud)

它无法编译,但这编译:

transform(tmp.begin(), tmp.end(), tmp.begin(), ::tolower);
Run Code Online (Sandbox Code Playgroud)

有什么问题std::tolower?它适用于一个参数,例如std::tolower(56)编译.谢谢!

c++ stl std stl-algorithm

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

模板重载加指针指针

我有以下代码:

template<class A, class B>
void test(A& a, const B* b)
{ std::cout << "hi" << std::endl; }

template<class A, class B>
void test(A& a, const B** b)
{ std::cout << "hello" << std::endl; }

class TestClass
{};


int main()
{
    int a = 5;
    TestClass b;
    TestClass* c = &b;
    test(a, &c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不知何故输出是"hi",虽然似乎更好的匹配将是第二个模板功能.当我删除consts作为限定符B*,B**然后我得到"hello",它对应于第二个模板函数.在这种情况下,编译器如何选择要调用的函数?谢谢!

c++ templates overloading const

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

无法在linux中使用fcntl切换到阻塞模式

我有一个示例程序:

int main()
{
   const char* fn = "/tmp/tmpfifo";
   int i = mkfifo(fn, 0666);
   int fd = open(fn, O_RDONLY | O_NONBLOCK);
   int flags = fcntl(fd, F_GETFL);
   flags &= ~O_NONBLOCK;
   fcntl(fd, F_SETFL, flags);

   char buf[1024];
   int rd= read(fd, buf, 100);
   cout << rd << endl;
   remove(fn);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

似乎在从文件描述符中删除非阻塞标志之后,read调用应该阻塞,直到将某些内容写入FIFO,但我的程序总是在没有阻塞和rd=0结果的情况下运行.你能解释一下这种行为吗?谢谢!

c linux io nonblocking fcntl

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

c ++ 11 std :: hash函数对象类线程安全

在c ++ 11中是在<functional>线程安全中声明的哈希函数类对象吗?例如,从多个线程调用此函数是否安全?

size_t hash1(const std::string& s) {
    std::hash<std::string> str_hash;
    return str_hash(s); 
}
Run Code Online (Sandbox Code Playgroud)

或者,如果有一个全局对象std::hash<std::string> str_hash_global;,那么从多个线程调用第二个函数是否安全?

size_t hash2(const std::string& s) {
    return str_hash_global(s); 
}
Run Code Online (Sandbox Code Playgroud)

c++ thread-safety c++11

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

AWS Sagemaker 推理端点无法通过自动扩展进行扩展

我有一个 AWS Sagemaker 推理终端节点,该终端节点启用了 SageMakerVariantInitationsPerInstance 目标指标的自动扩展功能。当我向端点发送大量请求时,实例数量会正确扩展到最大实例计数。但在我停止发送请求后,实例数不会缩减为 1(最小实例数)。我等了好几个小时。这种行为有原因吗?

谢谢

autoscaling amazon-sagemaker aws-auto-scaling

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

熊猫分层索引唯一值

说我有系列:

A  a  1
   b  1
B  c  5
   d  8
   e  5
Run Code Online (Sandbox Code Playgroud)

其中前两列在一起是层次结构索引。我想查找索引有多少个唯一值level=0,例如,在此输出中应为A 1; B 2。如何轻松做到这一点?谢谢!

python pandas

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

在构造函数中初始化const数组

我正在努力实现这样的目标

struct A {
    A(const int (&arr)[5])
      :  arr_(arr)
    {}

    const int arr_[5];
}
Run Code Online (Sandbox Code Playgroud)

显然这不起作用.我的目的是保持arr_场不变.实现这一目标的最佳方法是什么(可以是C++ 11)?

c++ arrays c++11

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

const限定符为decltype

我第一次尝试使用 decltype

vector<int> vals;
const decltype(&vals[0]) ptr;

for (const auto& val : vals)
    ptr = &val;    
Run Code Online (Sandbox Code Playgroud)

不编译,抱怨分配给只读变量ptr.我想要实现的是ptr类型const int*.我怎样才能使它工作?谢谢.

c++ c++11

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

如何从向量中删除所有元素

为什么这段代码不能从向量中删除所有元素?谢谢!

for (int i = 0; i < vec.size(); i++)
  vec.erase(vec.begin());
Run Code Online (Sandbox Code Playgroud)

c++ stdvector

0
推荐指数
1
解决办法
323
查看次数

使用std :: vector :: erase和const_iterators

我有一个返回的函数vector<string>::const_iterator.当我尝试使用此返回值作为参数vector<string>::erase,我得到一个错误之间的转换const_iteratoriterator是不可能的.有没有办法在不改变函数的返回值类型的情况下绕过这个问题?谢谢!

c++ iterator vector c++11

0
推荐指数
1
解决办法
109
查看次数