相关疑难解决方法(0)

在对象名称之前单个和双下划线的含义是什么?

有人可以解释在Python中对象名称之前有前导下划线的确切含义吗?另外,解释单个和双重前导下划线之间的区别.此外,无论所讨论的对象是变量,函数,方法等,这个含义是否保持不变?

python naming-conventions

1205
推荐指数
13
解决办法
36万
查看次数

在C++标识符中使用下划线有哪些规则?

在C++中通常用某种前缀命名成员变量来表示它们是成员变量而不是局部变量或参数.如果你来自MFC背景,你可能会使用m_foo.我myFoo偶尔也见过.

C#(或者可能只是.NET)似乎建议只使用下划线,如_foo.这是否允许C++标准?

c++ standards naming-conventions c++-faq

906
推荐指数
4
解决办法
24万
查看次数

是否有一个GCC选项来警告写"this-field"而不是`this-> field`?

以下代码(包含恶意错误)在没有任何警告的情况下编译GCC.但是,当然,它不像开发人员(我)那样工作.

#include <iostream>

struct A
{
    bool b;
    void set(bool b_) { this->b = b_; }
    bool get() const { return this-b; } // The bug is here: '-' instead of '->'
};

int main()
{
    A a;
    a.set(true);
    std::cout << a.get() << std::endl; // Print 1
    a.set(false);
    std::cout << a.get() << std::endl; // Print 1 too...
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以为编译器添加哪个警告(GCC 4.8)以避免这种错误?

链接问题:是否有任何强制(或警告)访问成员变量/函数的选项this->

c++ gcc gcc-warning

62
推荐指数
3
解决办法
5084
查看次数

派生对基类成员数据的模板类访问

这个问题是一个在问的赞助这个线程.

使用以下类定义:

template <class T>
class Foo {

public:
    Foo (const foo_arg_t foo_arg) : _foo_arg(foo_arg)
    {
        /* do something for foo */
    }
    T Foo_T;        // either a TypeA or a TypeB - TBD
    foo_arg_t _foo_arg;
};

template <class T>
class Bar : public Foo<T> {
public:
    Bar (const foo_arg_t bar_arg, const a_arg_t a_arg)
    : Foo<T>(bar_arg)   // base-class initializer
    {

        Foo<T>::Foo_T = T(a_arg);
    }

    Bar (const foo_arg_t bar_arg, const b_arg_t b_arg)
    : Foo<T>(bar_arg)
    {
        Foo<T>::Foo_T = T(b_arg);
    } …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates scope name-lookup

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

C++ 11是否允许标识符中的美元符号?

C++ 03中的标识符是否允许使用美元符号?在C++ 03中不允许使用标识符中的美元符号.GCC将其作为C扩展提供,并在C++ 03模式下正确地提供诊断.但是,在C++ 11中,int $ = 0将在没有警告的情况下编译.

这个答案的原因$可能是允许的,因为实现定义的标识符不需要诊断:

这里的答案是"可能":根据§2.11,标识符可以由数字标识符 - 非数字组成,从后者之一开始.标识符非数字是通常的a-z,A-Z并强调,除了因为C++ 11它们包括 通用字符-名称(例如\uBEAF,\UC0FFEE32),和其他执行定义的字符.因此,如果$允许在标识符中使用,则它是实现定义的.VC10及以上版本也支持早期版本.它甚至支持标识符 ?????.

但是:我不会用它们.使标识符尽可能可读和可移植.$是实现定义的,因此不可移植.

这种语言也存在于C++ 03标准中,因此我认为这不是一个非常令人信服的论点.

§2.10/ 2

此外,一些标识符保留供C++实现和标准库(17.6.4.3.2)使用,否则不得使用; 无需诊断.

标准中的哪些更改允许$用作标识符名称?

c++ identifier language-lawyer c++11

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

C++成员变量

考虑以下课程:

class A
{
  A();
  int number;
  void setNumber(int number);
};
Run Code Online (Sandbox Code Playgroud)

您可以通过3种方式实现'setNumber':

方法1:使用'this'指针.

void A::setNumber(int number)
{
  this->number = number;
}
Run Code Online (Sandbox Code Playgroud)

方法2:使用范围解析运算符.

void A::setNumber(int number)
{
  A::number = number;
}
Run Code Online (Sandbox Code Playgroud)

方法3:相反,用'm'或'_'表示所有成员变量(这是我的首选方法).

void A::setNumber(int number)
{
  mNumber = number;
}
Run Code Online (Sandbox Code Playgroud)

这只是个人偏好,还是选择特定方法有好处?

c++ variables scope class member

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

这个 - >引用一切

我最近花了很多时间使用javascript,现在又回到了C++.当我从一个方法访问一个类成员时,我倾向于为它添加前缀this->.

class Foo {

  int _bar;

public:  
  /* ... */

  void setBar(int bar) {
    this->_bar = bar;
    // as opposed to
    _bar = bar;
  }
}
Run Code Online (Sandbox Code Playgroud)

在阅读时,它在试图找出它来自何处时为我节省了大脑周期.
我有什么理由不这样做吗?

c++

14
推荐指数
3
解决办法
812
查看次数

Roslyn代码分析器 - 何时应该使用"this."?

在使用实例成员时,我总是明确地使用我的代码,在它们前面this.加上静态成员,并在前面添加类型名称.

罗斯林似乎不喜欢这一点,并礼貌地建议你可以省略this.,并Type.从你的代码在适当情况下...

......所以我会这样做... (没有双关语意)

public void DoSomethingCool()
{
    this.CallAwesomeMethod();
    CoolCucumber.DoSomethingLessAewsome();
}
Run Code Online (Sandbox Code Playgroud)

... roslyn建议我这样做......

public void DoSomethingCool()
{
    CallAwesomeMethod();
    DoSomethingLessAwesome();
}
Run Code Online (Sandbox Code Playgroud)

...但是当谈到使用扩展方法时,似乎我不能省略this.例如...... 的使用

public int GetTotal()
{
    // This doesn't work    
    return Sum(o => o.Value);

    // This does
    return this.Sum(o => o.Value);
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 为什么罗斯林似乎不喜欢明确使用this.Type.
  2. 为什么我需要明确this.用于扩展方法?
  3. 虽然这个问题没有严格的一部分,我怎么解决不想我用罗斯林之间的差异this.Type.和了StyleCop的分析仪坚持,我使用它们?

.net c# roslyn c#-6.0 roslyn-code-analysis

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

在C++构造函数中引导下划线的含义是什么?

好吧我不是一个非常有经验的C++程序员,但我想知道下面的构造函数的参数中下划线的意义是什么?

class floatCoords
 {
 public:
  floatCoords(float _x, float _y, float _width, float _height)
   : x(_x), y(_y), width(_width), height(_height)
  {

  }
  float x, y, width, height;
  ...
Run Code Online (Sandbox Code Playgroud)

c++ syntax constructor arguments identifier

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

Win32/MFC与C++的命名约定

我正在开发一个使用Win32/MFC框架和使用Visual Studio 2010的C++编程语言的应用程序.

我的问题是哪个命名约定需要用于变量,函数名,类名等.我听说微软建议使用"匈牙利表示法"命名约定.

能告诉我哪个标准可以使用吗?

c++ winapi mfc visual-studio-2010

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

Fortran中的匈牙利表示法

它被认为是好的还是坏的做法?我的一位朋友告诉我,一般来说,现在大多数语言都不被认为是好习惯,但是他认为他听说这不是fortran的情况.这是真的?如果是真的,为什么?

fortran hungarian-notation

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