小编Som*_*ken的帖子

将带逗号的字符串转换为float

是否有内置的Delphi函数可以将诸如'3,232.00'之类的字符串转换为float?由于逗号,StrToFloat引发异常.或者是首先删除逗号然后执行StrToFloat的唯一方法?

谢谢.

delphi regional

10
推荐指数
3
解决办法
4万
查看次数

保证重新排序矢量

说我有这个代码:

#include <iostream>
#include <vector>

int main() 
{
    std::vector<int> vec {10, 15, 20};
    auto itr = vec.begin();
    vec.erase(itr);
    for(const auto& element : vec)
    {
        std::cout << element << " ";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这给了我15 20预期的效果.现在,cppreference说erase():

在擦除点或之后使迭代器和引用无效,包括end()迭代器

很公平,但这是标准给出的唯一保证vector::erase()吗?

是否允许在擦除的迭代器之后重新排序它的元素?

例如,这些条件是否保证在擦除后保持,这意味着erase()迭代器之后的所有元素都向左移1:

vec[0] == 15
vec[1] == 20
Run Code Online (Sandbox Code Playgroud)

或者允许实现在他们认为合适的情况下移动值,从而创建场景vec[0] == 20等等?

我想引用标准的相关部分.

c++ vector language-lawyer

10
推荐指数
2
解决办法
565
查看次数

C++中的货币格式

我想用C++格式化价格

我可以使用,std::put_money但问题是我的数字格式区域设置与我的货币区域设置不同.

假设我想用法语格式化GBP的价格,如果我将语言环境设置为法语,我会得到一个欧元符号.我需要用户区域设置中的小数和价格区域设置中的货币.

我可以在Java中使用NumberFormat来自十进制语言环境,然后设置我想要的货币.

这可以用C++完成吗?

c++ c++11

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

Bluez编程

我正在使用USB蓝牙适配器在我的Raspberry Pi上使用BlueZ进行编程.我需要能够以编程方式连接到Arduino BT,问题是Arduino的蓝牙模块仍在使用传统配对,因此每当我尝试打开设备的套接字时,我都会得到一个Permission Denied.如何通过BlueZ发送PIN码来完成配对请求?

c bluetooth arduino bluez

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

delphi xe5 StrToFloat故障将ThousandSeparator更改为','

我在这做错了什么?我只是想将格式化的字符串转换为double,并使用传入的TFormatSettings作为StrToFloat的参数.我得到以下异常:

  '3,332.1' is not a valid floating point value.  
Run Code Online (Sandbox Code Playgroud)

千位分隔符和小数分隔符是TFormatSettings中的预期值(','和'.').

procedure TForm2.Button1Click(Sender: TObject);
var
  FS: TFormatSettings; 
  S: String;
  V: double;
begin
  FS:= TFormatSettings.Create; 
  codesite.Send('ThousandSeparator', FS.ThousandSeparator);  //correct ','
  codesite.Send('DecimalSeparator', FS.DecimalSeparator);    //correct '.'
  S := '3,332.1';
  try
    V := StrToFloat(S, FS);
  except on E: Exception do
    ShowMessage(e.Message);
  end;
  CodeSite.Send('S', S);
  CodeSite.Send('V', V);
end;
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe5

6
推荐指数
2
解决办法
1413
查看次数

从派生类隐藏属性

Jon Skeet在他的视频中提到了这个问题(虽然没有提供答案).

假设我们有一个名为Person的类,而Person类具有Name属性

然后我们有另一个班,间谍.当然,间谍是一个人,所以我们将从Person类派生.

public class Person
{
    public string Name { get; set; }
}

public class Spy : Person
{

}
Run Code Online (Sandbox Code Playgroud)

我们不希望人们知道Spy的名字,所以我们希望这会给出一个编译错误:

static void ReportSpy(Spy spy) {
  string name = spy.Name;
}
Run Code Online (Sandbox Code Playgroud)

或者:

static void ReportSpy(Spy spy)
{
   Person spyAsPerson = spy;
   string name = spyAsPerson.Name;
}
Run Code Online (Sandbox Code Playgroud)

我们怎么能防止这种事情发生呢?

c# inheritance

6
推荐指数
2
解决办法
140
查看次数

朋友宣言对面

假设我们有一个具有私有构造函数的类,通过friend我们可以允许某些特定的类仍然创建该类的对象:

class Foo
{
 friend class Bar;
private:
  Foo();
};

class Bar
{
  Bar()
  {
    //create a Foo object
  }
};
Run Code Online (Sandbox Code Playgroud)

现在如果我想要相反的friend,Foo看起来像这样:

class Foo
{
 //enemy/foe??? class Bar; (if only)
public:
  Foo();
};
Run Code Online (Sandbox Code Playgroud)

然后没有方法Bar可以访问Foo构造函数/使Foo其他类的对象可以(因为它是public).

class Bar
{
  Bar()
  {
    Foo foo; //compiler error
  }
};
Run Code Online (Sandbox Code Playgroud)

这样的构造是可能的还是我坚持保持Foo私密并为所有类添加朋友?

c++ friend c++17

6
推荐指数
2
解决办法
300
查看次数

带有结构体的 C++ 映射

所以,我得到了这个:

struct People_Info {
  bool isWorking;
  std::string name;
  int age;
  float height;
};
int counter = 0;
int random = urand(1, 4);
std::map<uin64, People_Info> PeopleMap;
Run Code Online (Sandbox Code Playgroud)

现在,将调用一个函数,该函数将使用此结构在映射中创建一个条目,该结构将设置一些默认值:

PeopleMap[counter].isWorking = false;
PeopleMap[counter].name = "Mr";
PeopleMap[counter].age = 1;
PeopleMap[counter].height = 1.60f;
counter++;
Run Code Online (Sandbox Code Playgroud)

现在,这个函数应该为新人创建一个条目,但是,在整个脚本中,我将删除一些条目,所以如果我有 5 个元素,并且我删除第二个元素,那么,我想编辑地图上的每个人:

for(int i = 0; i < 5 ; i++) {
  if(PeopleMap[i] == PeopleMap.end())  // Don't edit map entries that are erased
    continue;

  PeopleMap[i].isWorking = true;
}
Run Code Online (Sandbox Code Playgroud)

现在,由于某种原因它仍在编辑所有条目,我是否需要使用 new 为每个条目创建一个结构?

c++ struct dictionary

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

跟踪成员变量值更改

我想跟踪特定成员变量何时更改值,以便可以将其打印出来。现在,明显的解决方案是在成员的Set方法中添加跟踪功能,如下所示:

class Foo
{
public:
    Foo() {}

    void SetBar(int value)
    {
        //Log that m_bar is going to be changed
        m_bar = value;
    }
private:
    int m_bar; // the variable we want to track
};
Run Code Online (Sandbox Code Playgroud)

我面临的问题是我正在开发一个大型项目,并且某些类具有许多内部更改成员变量而不是调用其Setter的方法。

m_bar = somevalue;
Run Code Online (Sandbox Code Playgroud)

代替 :

SetBar(somevalue);
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有一种更快/更干净的方法来实现我想要的,而不是仅仅将每个更改m_bar =SetBar(。赋值运算符可能仅对该成员变量重载?

c++ class c++11

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

非平凡变量的常量正确性

(尽管与无关,但仍受此答案的启发)

我一直被告知(并且一直在告诉)const,即使对于寿命很短的变量,保持- 正确性也是有价值和良好的做法,例如:

const std::string a = "Hello world";
Run Code Online (Sandbox Code Playgroud)

代替

std::string a = "Hello world";
Run Code Online (Sandbox Code Playgroud)

这个:

  • 表达意图更清晰。
  • 确保变量是不可变的,因此将其传递给可能会更改它的某些函数将使编译器对您大吼大叫。
  • 由于编译器的优化,可能会提高性能。

尽管自从现代C ++引入复制省略功能以来,标准中已有一些子句允许编译器调用move构造函数而不是复制构造函数:

在以下复制初始化上下文中,可以使用移动操作代替复制操作:

(3.1) 如果return语句([stmt.return])中的表达式是一个(可能带有括号的)id表达式,该对象使用在最里面的封闭函数或lambda的主体或参数声明子句中声明的具有自动存储期限的对象进行命名-表达式,或

3.2) 如果throw-expression[[expr.throw])的操作数是非易失性自动对象(函数或catch子句参数除外)的名称,其范围不会超出最内层封闭的结尾try-block(如果有一个),

这是否意味着使用const带有非默认复制/移动构造函数的对象实际上会产生性能损失,而不是在遇到这种省略的情况时会增加性能吗?

c++ copy-elision

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