草庐IT

acceptable-value

全部标签

c++ - C++ 结构的 "acceptable"有多少功能?

我的第一篇文章,所以请放轻松!我知道C++中的结构和类之间没有真正的区别,但是包括我在内的很多人都使用结构或类来显示意图-用于对“普通旧数据”进行分组的结构和用于封装数据的类具有有意义的操作.现在,这很好,但你从什么时候开始认为某些东西不再只是一个结构,而应该成为一个类?我认为结构具有合理性的东西:仅具有简单初始化代码的构造函数。流插入/提取操作符等序列化代码。我不太确定但可能会做的事情:比较运算符简单的转换功能-例如在从外部源接收数据后对所有成员进行字节交换。我认为结构不应该有:动态内存分配。析构函数。复杂的成员函数。界限在哪里???另外,将类实例作为结构的成员是否合理?例如clas

c++ - C++ 中的 "new (&variable) value;"有什么作用?

假设我在C++程序中有以下代码:Objecta=Object(someParameters);new(&a)Object(someOtherParameters);我的假设是它将a的内容替换为Object(someOtherParameters),避免为声明可能的operator=对象。这是正确的吗? 最佳答案 它叫做placementnew.它在指定内存上调用构造函数,而不是分配新内存。请注意,在这种情况下,您必须在释放分配的内存之前显式调用对象的析构函数。澄清。假设你分配了一些原始内存char*rawMemory=newchar

c++ - C++ 中的 "new (&variable) value;"有什么作用?

假设我在C++程序中有以下代码:Objecta=Object(someParameters);new(&a)Object(someOtherParameters);我的假设是它将a的内容替换为Object(someOtherParameters),避免为声明可能的operator=对象。这是正确的吗? 最佳答案 它叫做placementnew.它在指定内存上调用构造函数,而不是分配新内存。请注意,在这种情况下,您必须在释放分配的内存之前显式调用对象的析构函数。澄清。假设你分配了一些原始内存char*rawMemory=newchar

c++ - 'value initializing' 是什么意思?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:WhatdothefollowingphrasesmeaninC++:zero-,default-andvalue-initialization?如果我有一个类,例如:classInfo{intx;inty;};我曾经创建过一个对象,Info*p=newInfo();Info旁边的括号是否意味着我正在初始化它?它与Info*p=newInfo;有何不同?我知道有一个question它区分新旧C++语言中的不同含义,但我想知道默认值初始化和值初始化之间的语义差异,例如值初始化是否意味着将某些东西初始化为零?

c++ - 'value initializing' 是什么意思?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:WhatdothefollowingphrasesmeaninC++:zero-,default-andvalue-initialization?如果我有一个类,例如:classInfo{intx;inty;};我曾经创建过一个对象,Info*p=newInfo();Info旁边的括号是否意味着我正在初始化它?它与Info*p=newInfo;有何不同?我知道有一个question它区分新旧C++语言中的不同含义,但我想知道默认值初始化和值初始化之间的语义差异,例如值初始化是否意味着将某些东西初始化为零?

c++ - std::promise set_value 和线程安全

我对std::promise::set_value()上的线程安全要求有点困惑。standardsays:Effects:Atomicallystoresthevaluerinthesharedstateandmakesthatstateready但是,它也说promise::set_value()只能用于设置一次值。如果多次调用,则会抛出std::future_error。所以你只能设置一次Promise的值。事实上,std::promise的几乎每个教程、在线代码示例或实际用例都涉及2个线程之间的通信channel,其中一个线程调用std::future::get(),其他线程调用

c++ - std::promise set_value 和线程安全

我对std::promise::set_value()上的线程安全要求有点困惑。standardsays:Effects:Atomicallystoresthevaluerinthesharedstateandmakesthatstateready但是,它也说promise::set_value()只能用于设置一次值。如果多次调用,则会抛出std::future_error。所以你只能设置一次Promise的值。事实上,std::promise的几乎每个教程、在线代码示例或实际用例都涉及2个线程之间的通信channel,其中一个线程调用std::future::get(),其他线程调用

c++警告: enumeration value not handled in switch [-Wswitch]

我正在尝试编译以下代码而没有警告:while(window.pollEvent(event)){switch(event.type){casesf::Event::Closed:window.close();break;casesf::Event::KeyPressed:if(event.key.code==sf::Keyboard::Escape)window.close();if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space))particleSystem.fuel(200/**window.getFrameTime()*/);if(

c++警告: enumeration value not handled in switch [-Wswitch]

我正在尝试编译以下代码而没有警告:while(window.pollEvent(event)){switch(event.type){casesf::Event::Closed:window.close();break;casesf::Event::KeyPressed:if(event.key.code==sf::Keyboard::Escape)window.close();if(sf::Keyboard::isKeyPressed(sf::Keyboard::Space))particleSystem.fuel(200/**window.getFrameTime()*/);if(

c++ - 为什么 back_insert_iterator/front_insert_iterator/insert_iterator 的 value_type/difference_type/pointer/reference 都是 void?

在我的项目中,我想将流拆分为一些给定类型的值,所以我实现了一个模板函数templateTOutputIterSplitSpace(std::istream&IS,TOutputIterresult){TElemelem;while(IS>>elem){*result=elem;++result;}returnresult;}我认为这很尴尬,因为我必须在调用时明确给出TElem的类型。例如,我必须写:std::vectorv;SplitSpace(std::cin,back_inserter(v));//IwanttoittobeSplitSpace(std::cin,back_inse