小编Nat*_*ate的帖子

在C++中,从函数返回向量仍然是不好的做法吗?

简短版本:在许多编程语言中返回大型对象(例如向量/数组)是很常见的.如果类有移动构造函数,这个样式现在在C++ 0x中是否可以接受,或者C++程序员认为它是奇怪/丑陋/可憎的?

长版本:在C++ 0x中,这仍然被认为是不好的形式?

std::vector<std::string> BuildLargeVector();
...
std::vector<std::string> v = BuildLargeVector();
Run Code Online (Sandbox Code Playgroud)

传统版本如下所示:

void BuildLargeVector(std::vector<std::string>& result);
...
std::vector<std::string> v;
BuildLargeVector(v);
Run Code Online (Sandbox Code Playgroud)

在较新的版本,则返回值从BuildLargeVector是一个rvalue,所以v将使用的移动构造函数来构造std::vector,假设(N)RVO不会发生.

甚至之前的C++ 0x第一形式常常是因为(N)RVO"有效"的.但是,(N)RVO由编译器决定.现在我们有rvalue引用,保证不会发生深度复制.

编辑:问题实际上与优化无关.所示的两种形式在现实世界的节目中具有几乎相同的性能.然而,在过去,第一种形式可能具有数量级更差的性能.因此,第一种形式是C++编程中的主要代码味道很长一段时间.不再了,我希望?

c++ coding-style return-value-optimization c++11

102
推荐指数
5
解决办法
4万
查看次数

如何验证SQLAlchemy ORM中的列数据类型?

使用SQLAlchemy ORM,我想确保值是其列的正确类型.

例如,假设我有一个Integer列.我尝试插入值"hello",这不是一个有效的整数.SQLAlchemy允许我这样做.只有在我执行时session.commit(),才会引发异常:sqlalchemy.exc.DataError: (DataError) invalid input syntax integer: "hello"….

我正在添加批量记录add(…),出于性能原因,我不想在每一个记录之后提交.

那么我怎么能:

  • 我尽快提出例外 session.add(…)
  • 或者,将其添加到批处理之前,确保我插入的值可以转换为目标Column数据类型?
  • 或任何其他方式来防止一个坏记录破坏整个commit().

python database orm sqlalchemy

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

php异常额外参数

抛出异常时是否可以添加额外的参数?

当我抛出异常时,我发送错误消息,但我还想在额外的参数中发送字段的名称.就像是:

throw new Exception('this is an error message', 'the field');
Run Code Online (Sandbox Code Playgroud)

所以,当我显示消息时,我可以这样做:

show_error($e->getFieldname, $e->getMessage());
Run Code Online (Sandbox Code Playgroud)

php

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

Node.js源代码需要什么编码?

我已经完成了一些Google搜索,但是我得到了与编码字符串或文件相关的结果.

我可以用UTF-8 编写我的Node.js JavaScript源代码吗?我可以在注释,字符串或变量名中使用非ASCII字符吗?

ECMA-262似乎需要UTF-16编码,但Node.js不会运行UTF-16编码.js文件.但是,它将运行UTF-8源并正确解释非ASCII字符.

这是设计还是"意外"?是否指定支持UTF-8源代码?

javascript unicode node.js

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

C++ struct alignment和STL向量

我有一个672字节长的遗留数据结构.这些结构按顺序存储在文件中,我需要读取它们.

虽然我可以逐个阅读它们,但这样做会很好:

// I know in advance how many structs to read in
vector<MyStruct> bunchOfStructs;
bunchOfStructs.resize(numberOfStructs);

ifstream ifs;
ifs.open("file.dat");
if (ifs) {
    ifs.read(&bunchOfStructs[0], sizeof(MyStruct) * numberOfStructs);
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,但我认为它只能起作用,因为数据结构大小恰好可以被编译器的结构对齐填充整除.我怀疑它会破坏其他编译器或平台.

另一种方法是使用for循环一次一个地读取每个结构.

问题 - >我什么时候需要关注数据对齐?向量中动态分配的内存是否使用填充或STL是否保证元素是连续的?

c++ stl

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

如何从Mac上的终端窗口运行g ++

我有一个简单的C++程序,我可以编译(从命令行g ++)并从我的工作计算机运行,但不是从我的家用计算机运行.我不知道他们有什么不同!它们都是macbooks,我在两者上都安装了iPhone SDK.

在我的家用电脑上:当我添加/Developer/usr/bin到我的时候,PATH我可以运行g ++,但它不能包括<string>,它不能识别printf和这样的功能.我还需要做些什么来使g ++工作?

c++ macos gcc g++

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

如何在c ++中使用strcopy

在c ++中,我有一个名为"Student.h"的文件

class LinkedList {
private: 

class Student {
public:

    int stId;
    char stName [20];
    char stMajor[20];
    double stAverage;
    Student * next;

    Student() {
        next = 0;
    }

    Student(int stId, char stName [20], char stMajor[20], double stAverage) {
        this.stId = stId;
        strcopy(this.stName, stName); // there is error here !
        strcopy(this.stMajor, stMajor);
        this.stAverage = stAverage;
    }
Run Code Online (Sandbox Code Playgroud)

我该怎么办 ?!

c++ copy char

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

比较CString的两个向量的最佳方法是什么

我试图找到最有效,最优化和最快速的方法来比较CString的标准向量.有问题的字符串区分大小写.我已经尝试将==运算符用于向量容器,但这有时会返回误报.我的意思是,例如,如果一个向量包含顺序(a,b,c)中的元素而另一个向量按顺序包含它们(b,c,a),则==运算符将返回false,即使它们共享相同的数据.另一件事是它不做区分大小写的比较.

我曾想过使用这样的基本嵌套循环方法:

//Not Tested

BOOL bMatch = TRUE;
for(int i=0; i<Vec1.size();i++)
{
  if(!bMatch)
     break;
  int nComp=0;
  for(int j=0;j<Vec2.size();j++)
  {
     if(vec1[i].CompareNoCase(Vec2[j])==0)
        {
          //We have a match--check next item
          break;
        }
     else
        {
          nComp++;
          if(nComp == Vec2.size()-1)
             {
                 //Reached end of vector and no match found
                 //Vectors don't match
                 bMatch=FALSE;
             }
        }

  }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码没有经过测试,我不确定是否有更好的方法可以实现这种比较,而无需使用嵌套循环.

非常感谢任何建议或帮助......

c++ comparison mfc stl vector

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