标签: const-string

为什么strrchr()返回`char*`而不是`const char*`?

该函数char* strrchr(const char *str, int ch)返回()中最后一次出现的指针(char*).strconst char *ch

所以我们可以编写以下代码而不需要任何转换:

#include <string.h>
int main()
{
    const char CONSTSTR[] = "foo/bar/foobar.txt";
    char *ptr = strrchr (CONSTSTR, '/');
    *ptr++ = 'B';
    *ptr++ = 'A';
    *ptr++ = 'D';
}
Run Code Online (Sandbox Code Playgroud)

返回的优势char*const char*什么?

编辑:
正如Shafik Yaghmour指出的那样,strchr实现如何工作有很好的答案

由于我的代码是在C++中,我将使用<cstring>而不是<string.h>.谢谢你的回答;-)

然而,Mike Seymour的答案最适合这个问题.我甚至在下面添加了一个更详细的答案,清楚地说strrchr()是一个C函数(不允许重载),声明适合const非const字符串.因为strrchr()可以使用非const字符串调用,所以返回的字符串也应该是非const …

c++ null-terminated const-string strrchr

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

是静态const字符串成员变量在使用之前总是初始化的吗?

在C++中,如果我想定义一些可以在不同的类,函数,文件中使用的非本地const字符串,我所知道的方法是:

  1. 使用define指令,例如

    #define STR_VALUE "some_string_value"
    
    Run Code Online (Sandbox Code Playgroud)
  2. const类成员变量,例如

    class Demo {  
    public:  
      static const std::string ConstStrVal;  
    };  
    // then in cpp  
    std::string Demo::ConstStrVal = "some_string_value";  
    
    Run Code Online (Sandbox Code Playgroud)
  3. const类成员函数,例如

    class Demo{  
    public:  
      static const std::string GetValue(){return "some_string_value";}  
    };  
    
    Run Code Online (Sandbox Code Playgroud)

现在我不清楚的是,如果我们使用第二种方法,变量ConstStrVal在任何情况下被任何代码实际使用之前总是初始化为"some_string_value"吗?因为"静态初始化命令惨败",我担心这个.如果这个问题有效,为什么每个人都使用第二种方法?

哪种方法最好,2或3?我知道#define指令不尊重范围,大多数人不推荐它.

谢谢!

c++ const-string

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

const_string lib问题

我正在尝试看起来不错的const_string lib,但它在运行时因访问冲突而崩溃(atomic_count,operator ++()).测试代码:

#include <boost/const_string/const_string.hpp>
#include <boost/const_string/concatenation.hpp>

typedef boost::const_string<wchar_t> wcstring;

class Test
{
private:
    const wcstring &s1;
    const wcstring &s2;

public:
    Test()
        : s1(L"")
        , s2(L"")
    {
    }

    const wcstring &GetS1()
    {
        return s1;
    }

    const wcstring &GetS2()
    {
        return s2;
    }
};


Test t;

int _tmain(int argc, _TCHAR* argv[])
{
    //Test t;
    wcstring t1 = t.GetS1(); // crashes here
    wcstring t2 = t.GetS2();

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

只有当t是全局的时候它才会崩溃.如果我将声明移动到main(),那没关系.系统:VS 2010,升级版本1.47.0

问题:我做错了什么或是库/编译器的问题?有人可以为C++推荐更稳定的不可变字符串实现吗?

c++ boost const-string

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

标签 统计

c++ ×3

const-string ×3

boost ×1

null-terminated ×1

strrchr ×1