小编Sis*_*sir的帖子

除int之外的其他类型的位域?

我有一个代码,它使用如下声明的位字段

typedef struct my{
    const char *name;
    uint8_t is_alpha : 1;   
    uint8_t is_hwaccel : 1; 
    uint8_t x_chroma_shift; 
    uint8_t y_chroma_shift; 

} mystr; 
Run Code Online (Sandbox Code Playgroud)

uint8_t是typedef'ed unsigned char.

使用此位字段在MS-VS 2008中构建代码会发出如下警告:

imgconvert.c(60) : warning C4214: nonstandard extension used : bit-field types other than int.
  1. 使用除int之外的其他类型的位字段是否存在任何问题/潜在问题?为什么警告?
  2. C99 C语言规范是否允许使用int类型的bit-fileds以外的其他文件?

c visual-c++ bit-fields

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

C++中Prototype设计模式和复制构造函数之间的区别是什么

我试图了解何时应该使用Prototype设计模式.以下是我理解的Prototype示例:

class Prototype
{
public:
    virtual Prototype* clone() = 0;
...
};

class ConcretePrototype : public Prototype
{
public:
    Prototype* clone() override { ... }
};

// Usage:
ConcretePrototype proto;
auto protPtr = proto.clone();
Run Code Online (Sandbox Code Playgroud)

问题在哪里:为什么这比以下更好:

class Obj
{
public:
    Obj();

    Obj(const Obj&);
    Obj& operator = (const Obj& other);
};

Obj o;
Obj o2 = o;
Run Code Online (Sandbox Code Playgroud)

那我什么时候应该使用Prototype呢?

c++ design-patterns

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

只有“void”是不可引用的类型吗?

#include <iostream>
using std::cout;
using std::endl;
using std::boolalpha;
using std::add_rvalue_reference_t;
using std::is_reference_v;


int main(void) {

    cout << boolalpha << is_reference_v<add_rvalue_reference_t<int>> << endl;    // true
    cout << boolalpha << is_reference_v<add_rvalue_reference_t<int &>> << endl;  // true
    cout << boolalpha << is_reference_v<add_rvalue_reference_t<int &&>> << endl; // true
    cout << boolalpha << is_reference_v<add_rvalue_reference_t<void>> << endl;   // false

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想知道除了 void 之外是否还有其他不可引用的类型?

c++ types c++11

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

在 std::lock_guard&lt;&gt; 的声明中添加 const 有什么意义?

在一些示例代码中,我看到以下内容const

const std::lock_guard<std::mutex> lock( mux );
Run Code Online (Sandbox Code Playgroud)

在其他一些示例中,没有const

任何技术或语义差异?const 是否以某种方式向读者发出有趣的信号?例如,它是否旨在提醒他们锁定不会再发生任何事情?

multithreading mutex constants c++11

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

每次调用函数时随机数都相同

每次我运行程序时,这些数字都是随机的,但在同一次运行中它们保持不变。我希望每次调用函数时数字都是随机的。我确实在 main() 中播种了生成器。

    std::random_device device;
    std::mt19937 generator(device());
Run Code Online (Sandbox Code Playgroud)

我的功能

void takeAssignment(std::vector<Student> &students,
                    const int min, const int max,
                    std::mt19937 e)
{
    std::uniform_int_distribution<int> dist(min, max);
    // all students take the assignment
    for (auto &s : students)
    {
        // random performance
        int score{dist(e)};
        s.addScore(score, max);
        std::cout << s.getName() << "'s score: " << score << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,每次在 min 为 0 和 max 为 10 的情况下调用该函数时,都会打印该函数的输出

Abril Soto's score: 1
Bailey Case's score: 9
Run Code Online (Sandbox Code Playgroud)

在那次运行期间。

将 dist 放入循环也不起作用,数字保持不变。

c++ random c++11

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

Flutter 运行失败 [INSTALL_FAILED_OLDER_SDK] 需要更新的 sdk 版本 #31(当前版本是 #30)

当我尝试时flutter run出现以下错误:

Error: ADB exited with exit code 1
Performing Streamed Install

adb: failed to install C:\Flutter\appname\build\app\outputs\flutter-apk\app.apk: Failure [INSTALL_FAILED_OLDER_SDK: Failed parse during installPackageLI: /data/app/vmdl1847062534.tmp/base.apk (at Binary XML file line #7):    
Requires newer sdk version #31 (current version is #30)]
Error launching application on SM A127F.
Run Code Online (Sandbox Code Playgroud)

这是我的 build.gradle 文件的一部分

defaultConfig {
        applicationId "de.domain.appname"
        minSdkVersion 31
        multiDexEnabled true
        targetSdkVersion 31
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
Run Code Online (Sandbox Code Playgroud)

android build gradle flutter

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

printf(“%d \ n”,4294967296); 犯了一些奇怪的错误

(4294967296 = 2 ^ 32)

我想4294967296使用printf(“%u,%d”)进行打印,并想知道会发生什么,但是得到一些奇怪的结果。

代码如下:

printf("%d\n", 4294967296);

printf("d = %u = %d = 0x%x  \n", 4294967296, 4294967296, 4294967296);//this is strange

printf("d = %u = %d = 0x%x  \n", 4294967295 + 1, 4294967295 + 1, 4294967295 + 1);
Run Code Online (Sandbox Code Playgroud)

我的结果是

0

d = 0 = 1 = 0x0

d = 0 = 0 = 0x0
Run Code Online (Sandbox Code Playgroud)

结果图

您可以在第二行中看到4294967296的二进制表达式是0x0,但是当我打印4294967296使用“%d”时,它将显示1,这让我感到困惑。我期望1的输出为0。

c visual-studio-2017

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

严格的 atoi/strtol 函数

在 C 中,当我使用:

int x = 0;
char str[] = " \t123abc";
x = atoi(str);
printf("%d\n", str); //123
Run Code Online (Sandbox Code Playgroud)

123被打印。我想知道是否有一个“严格”的 C 函数,如果字符串不完全是整数,它会返回 0。(我不关心数字符号(总是正数)和基数(总是 10))。

一些例子:

" \t123abc" -> 0
" 123abc" -> 0
"123abc" -> 0
" 123 " -> 0
"123" -> 123
"123\n" -> 0
Run Code Online (Sandbox Code Playgroud)

目前我创建了一个int sstoi (char *str)函数来做到这一点:

static const unsigned int pow10[10] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};

int sstoi (char *str) {
    int result = 0, length = …
Run Code Online (Sandbox Code Playgroud)

c type-conversion

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

Razor Pay 在发布模式下在 android 平台上崩溃。它在调试模式下工作正常

Razor Pay 在发布模式下在某些设备上的 android 中崩溃。当我们处于调试模式时,一切似乎都运行良好,但在发布模式下会崩溃。

在路径上没有找到类“com.razorpay.G_G”:DexPathList[[zip 文件“/data/app/in.abc.app-6JaCLtUU8i_xpQjmYbg4bQ==/base.apk”,zip 文件“/data/app/in .abc.app-6JaCLtUU8i_xpQjmYbg4bQ==/split_config.armeabi_v7a.apk", 压缩文件 "/data/app/in.abc.app-6JaCLtUU8i_xpQjmYbg4bQ==/split_config.en.apk",

请帮忙。

"react-native-razorpay": "^2.1.25",

"react-native": "^0.59.8",

Android 操作系统是Android PI,设备名称是Samsung S10

react-native flutter react-native-android razorpay

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