小编Naw*_*waz的帖子

迭代器的类型:输出与输入与前向与随机访问迭代器

C++ STL中有多少种类型的迭代器?截至目前,我知道这些:

  • 输出迭代器
  • 输入迭代器
  • 转发迭代器
  • 随机访问迭代器

还有更多吗?它们之间有什么区别?每个的限制和特征是什么?使用哪种类型?

c++ iterator stl

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

sizeof有两个论点

在C++ IS的C.1.3(2003.它也在C++ 11 IS中),该标准指出了ISO C和C++之间的差异; 即,为

char arr[100];
Run Code Online (Sandbox Code Playgroud)

sizeof(0, arr)以C语言返回sizeof(char*),但100在C++中.

我找不到sizeof两个参数的文档.明显的后备是逗号运算符,但我不这么认为:sizeof(arr)在C中100; sizeof(0, arr)sizeof(char*).两个sizeof(0, arr)sizeof(arr)100在C++中.

在这种情况下,我可能会忽略IS的重点.有人可以帮忙吗?这类似于09年讨论的问题,但没有人提到IS,我认为没有给出正确的答案.


编辑:实际上,IS正在谈论逗号运算符.因此,出于某种原因,在C中(0, arr)返回a char*,但char[100]在C++中返回a .为什么?

c c++ arrays pointers comma-operator

37
推荐指数
5
解决办法
2333
查看次数

函数try块何时有用?

我想知道程序员何时使用函数try块.什么时候有用?

void f(int i)
try
{
   if ( i  < 0 ) 
      throw "less than zero";
   std::cout << "greater than zero" << std::endl;
}
catch(const char* e)
{
    std::cout << e << std::endl;
}

int main() {
        f(1);
        f(-1);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:(在ideone处)

greater than zero
less than zero
Run Code Online (Sandbox Code Playgroud)

编辑:因为有些人可能认为函数定义的语法不正确(因为语法看起来不熟悉),我要说它不是不正确的.它叫做function-try-block.参见C++标准中的§8.4/ 1 [dcl.fct.def].

c++ function function-try-block

36
推荐指数
6
解决办法
9144
查看次数

parseSdkContent失败无法初始化类android.graphics.Typeface

当我打开布局编辑器时,eclipse会给出这个错误:

parseSdkContent failed
Could not initialize class android.graphics.Typeface
Run Code Online (Sandbox Code Playgroud)

当我尝试运行项目时,它会给出这个错误:

An internal error occurred during: "Launching myapp".
java.lang.NullPointerException
Run Code Online (Sandbox Code Playgroud)

每次我收到此错误,我都要重启eclipse.有什么解决方案吗?这个问题今天突然开始.


XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#66000000"
     >

    <RelativeLayout
        android:id="@+id/refresh_match_layout"
        android:layout_width="fill_parent"
        android:layout_height="150dp"
        android:layout_centerInParent="true"
        android:layout_margin="15dp"
        android:background="@drawable/app_detay_lay_bg"
        android:orientation="vertical"
        android:padding="10dp"
        android:visibility="visible" >

        <ImageView
            android:id="@+id/app_icon"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:padding="10dp"
            android:textColor="#ffffff"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/app_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:textColor="#000000"
            android:layout_toRightOf="@+id/app_icon"
            android:layout_marginTop="2dp"
            android:textSize="20sp" />

        <ImageButton
            android:id="@+id/app_detail_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            android:layout_marginBottom="2dp"
            android:background="@null"
            android:src="@drawable/settings_detail"/>

        <ImageButton
            android:id="@+id/app_remove_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/app_icon"
            android:layout_alignTop="@+id/app_detail_button"
            android:background="@null"
            android:src="@drawable/settings_remove" />

    </RelativeLayout>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

错误图片: 在此输入图像描述

eclipse android nullpointerexception android-layout

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

为什么sizeof(bool)没有被标准本身定义为一个?

C++标准本身的大小char,signed char并且unsigned char被定义为1个字节.我想知道它为什么没有定义sizeof(bool)呢?

C++ 03标准$ 5.3.3/1说,

sizeof(char),sizeof(signed char)和sizeof(unsigned char)是1; sizeof应用于任何其他 基本类型(3.9.1)的结果是实现定义的.[注意:特别是sizeof(bool)和sizeof(wchar_t)是实现定义的 .69)

我理解sizeof(bool)不能小于一个字节的基本原理.但有没有理由说它为什么应该大于1个字节呢?我并不是说实现将它定义为大于1,但是标准使它被实现定义为好像它可能大于1.

如果没有理由sizeof(bool)大于1,那么我不明白为什么标准没有1 byte像它定义的那样定义它sizeof(char),而且它是所有变体.

c++ standards boolean sizeof

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

如何抛弃波动性?

如何抛弃波动性?我应该使用哪种c ++样式演员?

c++ casting volatile

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

从函数传递/返回数组(非指针)引用的一般规则?

我们可以将数组的引用传递给如下函数:

void f(int (&a)[5]);

int x[5];
f(x);     //okay
int y[6];
f(y);     //error - type of y is not `int (&)[5]`.
Run Code Online (Sandbox Code Playgroud)

或者甚至更好,我们可以编写一个函数模板:

template<size_t N>
void f(int (&a)[N]); //N is size of the array!

int x[5];
f(x);     //okay - N becomes 5
int y[6];
f(y);     //okay - N becomes 6
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如何从函数返回数组的引用?

我想从函数返回以下类型的数组:

int a[N];
int a[M][N];
int (*a)[N];
int (*a)[M][N];
Run Code Online (Sandbox Code Playgroud)

其中,MN在编译时已知!

从函数传递和返回数组的编译时引用的一般规则是什么?我们如何int (*a)[M][N]将函数数组的引用传递给函数?

编辑:

Adam评论说:int (*a)[N]不是数组,它是指向数组的指针.

是.但是在编译时已知一个维度!我们如何将这个在编译时已知的信息传递给函数?

c++ arrays compile-time

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

Segfault声明类型为vector <shared_ptr <int >>的变量

这是给出段错误的程序.

#include <iostream>
#include <vector>
#include <memory>

int main() 
{
    std::cout << "Hello World" << std::endl;

    std::vector<std::shared_ptr<int>> y {};  

    std::cout << "Hello World" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

当然,程序本身绝对没有错.segfault的根本原因取决于其构建和运行的环境.


背景

我们在亚马逊上使用构建系统,该系统以几乎与机器无关的方式构建和部署二进制文件(libbin).对于我们的情况下,基本上意味着它部署的可执行文件(从上面的程序内置)到和几乎所有的依赖(即共享库)进入.为什么我使用的短语"几乎"是因为共享库,比如,,和可能的其他几个人,从系统(即从可执行选秀权).请注意,这是应该挑选从不过.$project_dir/build/bin/$project_dir/build/lib/libc.solibm.sold-linux-x86-64.so.2/lib64libstdc++$project_dir/build/lib

现在我运行如下:

$ LD_LIBRARY_PATH=$project_dir/build/lib ./build/bin/run

segmentation fault
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行它,而不设置LD_LIBRARY_PATH.它运行正常.


诊断

ldd

以下是ldd这两种情况的信息(请注意,我编辑了输出,以便在存在差异的地方提及库的完整版本)

$ LD_LIBRARY_PATH=$project_dir/build/lib ldd ./build/bin/run

linux-vdso.so.1 =>  (0x00007ffce19ca000)
libstdc++.so.6 => $project_dir/build/lib/libstdc++.so.6.0.20 …
Run Code Online (Sandbox Code Playgroud)

c++ gcc redhat ld segmentation-fault

33
推荐指数
2
解决办法
1086
查看次数

在C++中表示Nullable成员的最佳方法?

可能重复:
C++中的Nullable值

在C++中表示可空成员的最佳方法是什么?

在C#中,我们可以使用Nullable<T>类型.非常需要这样的数据类型,因为并非所有数据都具有有意义的价值.这是一个非常重要的数据类型,@ Jon Skeet花了整整一章,跨越了27页,仅Nullable<T>在他的优秀着作C#Depth中进行了描述.

一个简单的例子可以是一个Person1,定义为:

struct Person
{
  std::string Name;
  DateTime    Birth;
  DateTime    Death;
  //...
};
Run Code Online (Sandbox Code Playgroud)

由于一个人总是有生日,所以Birth上述班级的成员总会有一些有意义的价值.但是怎么样Death?如果这个人还活着,它应该有什么价值呢?在C#中,此成员可以声明为Nullable<DataTime>2,null如果此人活着,则可以将其分配.

在C++中,解决这个问题的最佳方法是什么?截至目前,我只考虑了一个解决方案:将成员声明为指针:

 DataTime *Death;
Run Code Online (Sandbox Code Playgroud)

现在它的价值可以是nullptr人活着的时候.但它强迫使用new死人,因为它会有一些有效的价值.它反过来意味着不能依赖编译器生成的默认复制语义代码.程序员必须编写复制构造函数,复制赋值,析构函数遵循三条规则(C++ 03),或者在C++ 11中规则,五条规则.

那么,除了制作指针之外,我们还有更好,更优雅的解决方案吗?


其他示例包括关系数据库表,因为在许多DBMS中,列可以为空.

这也有一个简写.人们可以写DataTime?正是因为相同Nullable<DateTime>.

c++ nullable c++11

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

为什么临时的寿命不会延长到封闭物体的寿命?

我知道临时不能绑定到非const引用,但它可以绑定到const引用.那是,

 A & x = A(); //error
 const A & y = A(); //ok
Run Code Online (Sandbox Code Playgroud)

我也知道在第二种情况(上图)中,临时创建A()的生命周期延长到const引用的生命周期(即y).

但我的问题是:

可以将绑定到临时的const引用进一步绑定到另一个const引用,将临时的生命周期延长到第二个对象的生命周期吗?

我尝试过这个并没有用.我不太明白这一点.我写了这段代码:

struct A
{
   A()  { std::cout << " A()" << std::endl; }
   ~A() { std::cout << "~A()" << std::endl; }
};

struct B
{
   const A & a;
   B(const A & a) : a(a) { std::cout << " B()" << std::endl; }
   ~B() { std::cout << "~B()" << std::endl; }
};

int …
Run Code Online (Sandbox Code Playgroud)

c++ temporary

31
推荐指数
3
解决办法
3529
查看次数