小编Joh*_*itb的帖子

C++:可以为int分配一个char*吗?

我读高级Linux编程第2章:
http://www.advancedlinuxprogramming.com/alp-folder/alp-ch02-writing-good-gnu-linux-software.pdf

在本节中2.1.3 Using getopt_long,有一个示例程序有点像这样:

int main (int argc, char* argv[]) {
  int next_option;
  // ...
  do {
    next_option = getopt_long (argc, argv, short_options, long_options, NULL);
    switch (next_option) {
       case ‘h’: /* -h or --help */
       // ...
    }
    // ...
Run Code Online (Sandbox Code Playgroud)

引起我注意的是next_option被声明为int.函数getopt_long()显然返回表示其在下面的switch语句中使用的短命令行参数的int.为什么可以将该整数与switch语句中的字符进行比较?

是否有从char(单个字符?)到int的隐式转换?上面的代码如何有效?(参见链接pdf中的完整代码)

c++ linux casting char

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

怎么能自动完成?

有没有办法自动为所有派生类执行此操作,我不必为所有嵌套类创建函数applyPack.

这是我的代码:

/** every class has registered id with this function */
template<typename T>
uint getID() {
    static uint id = registerClass<T>();
    return id;
}

class TemplatesPack {
public:
    template<typename T>
    typename T::Template get();
};

class Object {
public:
    virtual void applyPack(TemplatesPack *p) { this->setTemplate(p->get<Object>()); };
};

class Object2: public Object {
public:
    void applyPack(TemplatesPack *p) { this->setTemplate(p->get<Object2>()); };
};

class Object3: public Object  {
public:
    void applyPack(TemplatesPack *p) { this->setTemplate(p->get<Object3>()); };
};

class Object4: public Object2 {
public:
    void …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

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

C++模板问题

有人可以解释以下代码的输出吗?

#include <iostream>

template <class T>
void assign(T& t1, T& t2){
    std::cout << "First method"<< std::endl;
    t1 = t2;
}

template <class T>
void assign(T& t1, const T& t2) {
    std::cout << "Second method"<< std::endl;
    t1 = t2;
}

class A
{
public:
    A(int a) : _a(a) {};

private:
    friend A operator+(const A& l, const A& r);

    int _a;
};

A operator+(const A& l, const A& r) 
{
    return A(l._a + r._a);
}

int main ()
{
    A a = …
Run Code Online (Sandbox Code Playgroud)

c++ templates

0
推荐指数
2
解决办法
115
查看次数

如果性能是一个非常重要的考虑因素,考虑c ++ 0x是否合适?

我写了一个简单的测试来检查c ++ 0x有多好.这是示例C++代码

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;
#ifndef __GXX_EXPERIMENTAL_CXX0X__
 #define emplace_back push_back
 #define auto typeof(vs.begin())
#endif
int main()
{
 vector<string> vs;
 string s;
 while(cin>>s)
 {
  vs.emplace_back(s);
 }
 sort(vs.begin(),vs.end());
 for(auto it = vs.begin();it != vs.end();++it)
 {
  cout << (*it) << endl;
 }
 return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是一个运行它的脚本

#!/bin/bash

inputFile=`mktemp`;
outputFile1=`mktemp`
outputFile2=`mktemp`

cat /dev/urandom | base64 > $inputFile 2> /dev/null &

echo "Generating Sample Input.. ${1:-10} seconds"
sleep ${1:-10}

export TOKILL=`pgrep -P $$ cat`
$(kill $TOKILL) …
Run Code Online (Sandbox Code Playgroud)

c++ testing c++11

-1
推荐指数
2
解决办法
525
查看次数

是否在C++中删除空指针被认为是未定义的行为?

考虑以下代码:

int main() {
  int *i = nullptr;
  delete i;
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 删除空指针是否被视为未定义的行为?
  2. 在C++ 11或C++ 14中有什么变化吗?

c++ null-pointer undefined-behavior c++11 c++14

-4
推荐指数
1
解决办法
511
查看次数