小编sbi*_*sbi的帖子

如何将字符串与const char*进行比较?

#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
        string cmd;
        while(strcmp(cmd.c_str(),"exit")==0 && strcmp(cmd.c_str(),"\exit")==0)
        {
                cin>>cmd;
                cout<<cmd;
        }
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

我被卡住了.

c++

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

查找数组中元素总和最大的子序列

我最近采访了一家公司,他们让我写一个算法,找到数组中元素总和最大的子序列.数组中的元素可以是负数.是否有O(n)解决方案?非常感谢任何好的解决方案.

c c++ algorithm

13
推荐指数
2
解决办法
3万
查看次数

什么时候在C中需要malloc?

我想所有都malloc(sizeof(structure)) 可以这样替换:

char[sizeof(structure)]
Run Code Online (Sandbox Code Playgroud)

那么什么时候malloc需要?

c malloc

13
推荐指数
3
解决办法
8182
查看次数

我可以空基优化可变数据吗?

我有一个类模板,看起来像这样:

template<typename T, typename Mutex, typename SomePolicy>
class my_class {
public:
  T f() const {
    resource_lock a_lock(some_mutex);
    return some_policy.some_operation(some_data);
  }
private:
  T             some_data;
  mutable Mutex some_mutex;
  SomePolicy    some_policy;
};
Run Code Online (Sandbox Code Playgroud)

如果不同时使用,我们有一个虚拟互斥类型,它具有所有成员函数作为内联空函数而没有数据.有些策略包含每个实例数据和那些没有任何数据的策略.

这是库代码,事实证明这个类模板在应用程序代码中使用,其中额外的字节对于数据成员是必需的some_mutex,some_policy甚至当它们是空类时.所以我想利用空基优化.对于该政策,这很容易:

template<typename T, typename Mutex, typename SomePolicy>
class my_class {
public:
  T f() const {
    resource_lock a_lock(the_data.some_mutex);
    return the_data.some_operation(the_data.some_data);
  }
private:
  struct data : SomePolicy {
    T             some_data;
    mutable Mutex some_mutex;
  };
  data the_data;
};
Run Code Online (Sandbox Code Playgroud)

但是,考虑到这some_mutex一点mutable,我不知道如何使它成为一个没有制作的基类the_data,因此所有数据mutable,从而完全接管编译器的责任,保护我免受愚蠢的常量错误. …

c++ optimization mutable

13
推荐指数
2
解决办法
363
查看次数

在C/C++程序中使用Assembler优化某些功能真的值得吗?

在诸如游戏开发,实时系统等的某些开发领域中,具有快速且优化的程序是重要的.另一方面,现代编译器已经进行了大量优化,并且在一个需要考虑截止日期的世界中,在汇编中进行优化可能非常耗时.

问题:

  1. 在C/C++程序中使用Assembly优化某些功能真的值得吗?

  2. 使用今天的现代编译器使用Assembly优化C/C++程序时,是否真的有足够的性能提升?


我对所发布的答案有所了解,在嵌入式系统,多媒体编程(图形,声音等)等特定领域,任何可以获得的收益都很重要.此外,人们需要能够(或有能力)在装配中做得比现代编译器更好.做一些真正优化的C/C++可以花费更少的时间并且可以做得足够好.最后一点,学习汇编可以帮助理解程序的内部机制,并最终使某人成为更好的程序员.

c c++ optimization assembly

12
推荐指数
4
解决办法
1962
查看次数

const有什么问题?

constC++和C++ 0x中已知的缺点是什么?

c++ c++11

12
推荐指数
4
解决办法
2198
查看次数

将std :: string转换为C*函数的char*时需要注意什么?

我已经阅读了许多帖子,询问有关如何转换C++ std::stringconst std::string&将其char*传递给C函数的问题,而且似乎有很多关于这样做的警告.一个人必须要注意字符串是连续的和许多其他东西.关键是我从来没有真正理解需要注意的所有要点以及为什么

我想知道,如果有人可以总结告诫和挫折有关从做一个转换std::stringchar*所需要传递给C函数?

当它std::string是一个const引用时,它只是一个非const引用,当C函数char*改变它时,它什么时候不会改变它.

c c++ string c++-faq char

12
推荐指数
2
解决办法
1796
查看次数

C++编译时函数执行

我的代码中有字符串标记,它们被转换为数字并用于在标记值结构中搜索值.

我有这样的事情:

void foo()
{
    type value = search("SomeTag");
}
Run Code Online (Sandbox Code Playgroud)

搜索定义如下:

type search(const char* tag)
{
    return internal_search(toNumber(tag));
}
Run Code Online (Sandbox Code Playgroud)

因为所有时间标记在编译时都是常量,所以我想删除将标记转换为搜索函数中的数字的调用.我知道可以在编译时使用模板(http://en.wikipedia.org/wiki/Compile_time_function_execution)执行一些简单的函数,但我不知道如何迭代空终止字符串并保留中间值在模板中.你能给出一个简单的样本来迭代一个空终止的字符串,并在一个公共变量中添加字符吗?

c++ template-meta-programming

12
推荐指数
2
解决办法
5050
查看次数

我可以使用错误信息复制构造一个boost :: exception吗?

考虑使用boost的异常类的以下代码:

class exception : virtual public boost::exception {
    // ...
};

template<typename Exc>
class exception_impl : virtual public std::exception
                     , public Exc {
public:
    exception_impl(const Exc& exc) : Exc(exc) {}
    virtual const char* what() const throw() {return "blah";}
};
Run Code Online (Sandbox Code Playgroud)

(实际上这段代码更复杂.例如,exception_impl只有std::exception后者不是已经是直接或间接的基类Exc.但这只会分散我的问题,所以我跳过了它.)


鉴于此,我现在可以派生自己的异常类:

class some_exception : public exception {
    // ...
};
Run Code Online (Sandbox Code Playgroud)

并使用它们:

struct tag_test_int;
typedef boost::error_info<tag_test_int,int> test_int_info;

void f()
{
    boost::throw_exception( exception_impl<some_exception>() << test_int_info(42) );
}
Run Code Online (Sandbox Code Playgroud)

但是,事实证明,生成的异常没有该test_int_info对象.所以我更改了exception_impl构造函数以提供一些诊断信息:

    exception_impl(const Exc& exc)
    : …
Run Code Online (Sandbox Code Playgroud)

c++ boost exception boost-exception

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

为什么代码"foo :: foo :: foo :: foob"编译?

一位同事不小心写了这样的代码:

struct foo {
  foo() : baz(foobar) {}
  enum bar {foobar, fbar, foob};
  bar baz;
};

void f() {
  for( auto x : { foo::foobar,
                  foo::fbar,
                  foo::
                  foo::
                  foo::foob } );
    // ...
}
Run Code Online (Sandbox Code Playgroud)

GCC 5.1.0编译了这个.

这个编译的规则是什么?

c++ gcc names language-lawyer c++11

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