小编0x4*_*2D2的帖子

为什么在字符串中任意放置null终止符会终止它呢?

null字符或null-terminator(\0)用于终止连续的字符序列.我发现在C中,我可以将字符添加到随机位置的字符串中,字符串将从该点切断.例如:

char * s = "Hello\0World";
Run Code Online (Sandbox Code Playgroud)

将导致s等于字符串"Hello".但是,在JavaScript中,情况并非如此:

var s = "Hello\0World";
Run Code Online (Sandbox Code Playgroud)

以上内容无法按预期工作.s将等于字符串"HelloWorld".

为什么这不起作用?

javascript string terminator

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

在 C++ 中读取字节

我正在尝试从二进制文件中读取字节,但没有成功。我尝试了很多解决方案,但没有得到结果。文件结构:

[offset] [type]          [value]          [description] 
0000     32 bit integer  0x00000803(2051) magic number 
0004     32 bit integer  60000            number of images 
0008     32 bit integer  28               number of rows 
0012     32 bit integer  28               number of columns 
0016     unsigned byte   ??               pixel 
0017     unsigned byte   ??               pixel 
........ 
xxxx     unsigned byte   ??               pixel
Run Code Online (Sandbox Code Playgroud)

我是如何尝试的(不起作用):

auto myfile = fopen("t10k-images.idx3-ubyte", "r");
char buf[30];
auto x = fread(buf, 1, sizeof(int), myfile);
Run Code Online (Sandbox Code Playgroud)

c++ binary byte c++11

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

在C++中分配名称空间

关于命名空间我有点困惑.这就是我所知道的.通常,如果您在代码中有这样的名称空间

namespace foo
{ 
   namespace gfoo
   {
       class apple
       {..};
   }
}
Run Code Online (Sandbox Code Playgroud)

现在使用以下代码

using namespace foo::gfoo;
Run Code Online (Sandbox Code Playgroud)

您可以直接访问该类,apple而无需在类之前键入命名空间foo::gfoo::apple.

现在我在一些代码示例中看到过

namespace qi = boost::spirit::qi
Run Code Online (Sandbox Code Playgroud)

然后在方法中使用它

void someMethod()
 {
   using qi::char_
 }
Run Code Online (Sandbox Code Playgroud)

现在我的问题是做什么的目的是什么 namespace qi = boost::spirit::qi

c++ namespaces c++11

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

如何在单一设置中合并exe和msi文件?

我正在使用visual studio setup项目创建一个设置,它将创建两个文件,一个是msi,第二个是exe.但我想用它创建单个文件.

.net c#-4.0

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

构造函数中的c ++异常安全性

怎么样下面的代码

MyClass a(new Foo(), new Bar());
Run Code Online (Sandbox Code Playgroud)

如果"new Foo()"成功,但"new Bar()"抛出,Foo会泄漏吗?

正在服用

std::unique_ptr<Foo>
Run Code Online (Sandbox Code Playgroud)

要么

std::shared_ptr<Foo>
Run Code Online (Sandbox Code Playgroud)

作为参数,足以防止泄漏?

c++ exception shared-ptr unique-ptr c++11

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

编译时递归函数计算两个整数的下一个幂?

Bit Twiddling Hacks网站上,提供了以下算法来将整数舍入到下一个2的幂:

unsigned int v; // compute the next highest power of 2 of 32-bit v
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
Run Code Online (Sandbox Code Playgroud)

我想编写一个元编程函数来计算相同的操作:

  • 递归(用于编译时执行)
  • 对于任何类型的整数(它甚至应该适用于任何大小的可能笨拙的非标准整数,如15位,65位...)

这是预期功能的形式:

template <typename Type,
          // Something here (like a recursion index)
          class = typename std::enable_if<std::is_integral<Type>::value>::type,
          class = typename std::enable_if<std::is_unsigned<Type>::value>::type>
constexpr Type function(const Type value)
{
     // Something here
}
Run Code Online (Sandbox Code Playgroud)

怎么做 ? …

c++ recursion bit-manipulation template-meta-programming c++11

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

clang正在使用错误的系统include目录

我的工作站是RHEL 6.5,它预装了gcc 4.4.7.我们正在做C++ 11工作,因此我们购买了RedHat Developer的Toolset存储库集,其中包括G ++ 4.8.2.这两台G ++版本都安装在这台机器上,但4.8.2是从命令行和构建版本启动时调用的版本:

john@hurricane /home/john/repo/phoenix [PHX-29|?5]  $ which g++
/opt/rh/devtoolset-2/root/usr/bin/g++
john@hurricane /home/john/repo/phoenix [PHX-29|?5]  $ g++ --version
g++ (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

请注意不寻常的安装位置.

我也从源代码构建了clang并安装了它.但是当我使用clang构建C++ 11项目时,clang正在拾取错误的系统包含.它从gcc 4.4.7中获取系统头,而不是从4.8.2中获取.

G ++配置:

john@hurricane /home/john/repo/phoenix [PHX-29|?5]  $ g++ -E -x c++ - -v < /dev/null 
Using built-in specs. …
Run Code Online (Sandbox Code Playgroud)

c++ linux clang c++11 clang++

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

错误:C++ 要求所有声明都有类型说明符

我是 C++ 新手,我一直在读这本书。我读了几章,想到了自己的想法。我尝试编译下面的代码,但出现以下错误:

||=== 构建:密码调试(编译器:GNU GCC 编译器)===| /Users/Administrator/Desktop/AppCreations/C++/Password/Password/main.cpp|5|错误:C++ 需要所有声明的类型说明符| ||=== 构建失败:1 个错误,0 个警告(0 分钟,2 秒)===|。

我不明白代码有什么问题,有人可以解释一下有什么问题以及如何修复它吗?我读了其他帖子,但我无法理解。

谢谢。

#include <iostream>

using namespace std;

main()
{
    string password;
    cin >> password;
    if (password == "Lieutenant") {
        cout << "Correct!" << endl;
    } else {
        cout << "Wrong!" << endl;
    }

}
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors codeblocks specifier

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

使用基类的静态函数而不指定参数以避免歧义

我的一些基类获得了大量的参数.现在我想指定要使用的静态函数:

template <typename... Types>
struct SBase {
    static void func() {
    }
};

struct A : public SBase<int> {
};

struct B : public A, public SBase<int, double, short,
    unsigned int, float, unsigned char, long, unsigned long> {

    // using SBase::func; // Not possible.
    // Horrible, but works.
    using SBase<int, double, short,
    unsigned int, float, unsigned char, long, unsigned long>::func;
};
Run Code Online (Sandbox Code Playgroud)

您可以看到,我需要两次编写模板参数,这会导致代码重复.

有没有办法摆脱它?

c++ class-template c++11

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

G++:错误:无法识别的选项“-soname”

我正在尝试在 64 位 Ubuntu 12.04 上构建 SLitrani。我已经从源代码构建了 ROOT 5.34.03,我确实弄清楚了如何为 $ROOTDEV 设置 LD_LIBRARY_PATH 和 PATH 变量,所以问题不存在,但是当我尝试制作 SplineFit 时,我得到了

>>> g++: error: unrecognized option ‘-soname=libSplineFit.so’
make: *** [libSplineFit.so] Error 1
Run Code Online (Sandbox Code Playgroud)

我也没有改变所有-m32-m64在Makefile中,所以我不知道是怎么回事。我能够安装 TwoPad,但无法从 SplineFit 继续。我已经在这个版本上工作了很长一段时间,希望得到任何帮助。

g++

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