我有以下代码:
#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)
不知何故,这是有效的 - 输出是"你好".这是如何被编译器解释的?我不明白如何将函数插入到流中.
你能解释为什么这段代码崩溃了吗?我期望输出"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) 我有
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)编译.谢谢!
我有以下代码:
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",它对应于第二个模板函数.在这种情况下,编译器如何选择要调用的函数?谢谢!
我有一个示例程序:
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 ++ 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) 我有一个 AWS Sagemaker 推理终端节点,该终端节点启用了 SageMakerVariantInitationsPerInstance 目标指标的自动扩展功能。当我向端点发送大量请求时,实例数量会正确扩展到最大实例计数。但在我停止发送请求后,实例数不会缩减为 1(最小实例数)。我等了好几个小时。这种行为有原因吗?
谢谢
说我有系列:
A a 1
b 1
B c 5
d 8
e 5
Run Code Online (Sandbox Code Playgroud)
其中前两列在一起是层次结构索引。我想查找索引有多少个唯一值level=0,例如,在此输出中应为A 1; B 2。如何轻松做到这一点?谢谢!
我正在努力实现这样的目标
struct A {
A(const int (&arr)[5])
: arr_(arr)
{}
const int arr_[5];
}
Run Code Online (Sandbox Code Playgroud)
显然这不起作用.我的目的是保持arr_场不变.实现这一目标的最佳方法是什么(可以是C++ 11)?
我第一次尝试使用 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*.我怎样才能使它工作?谢谢.
为什么这段代码不能从向量中删除所有元素?谢谢!
for (int i = 0; i < vec.size(); i++)
vec.erase(vec.begin());
Run Code Online (Sandbox Code Playgroud) 我有一个返回的函数vector<string>::const_iterator.当我尝试使用此返回值作为参数vector<string>::erase,我得到一个错误之间的转换const_iterator和iterator是不可能的.有没有办法在不改变函数的返回值类型的情况下绕过这个问题?谢谢!