因此,我意识到const T&并且T const&它们是相同的并且都意味着对const T的引用.在这两种情况下,引用也是常量的(与指针不同,引用不能被重新分配).我观察到,在我有点经验的情况下,大多数C++程序员都会使用const T&,但我遇到过一些使用过的人T const&.我const T&之所以使用它只是因为我学到了这一点,所以T const&对我来说看起来有点滑稽.您使用您使用的变体的原因是什么?你们中的任何一个人是否在一个组织工作,其编码标准要求使用一种变体而不是另一种变体?
编辑
根据答案,看来在两者之间进行选择的一个原因是你是想要像编译器(从右到左)还是像英语(从左到右)那样阅读它.如果像编译器一样读取它,则"T const&"读作"&(引用)const(到常量)T(类型T)".如果从左到右读取它像英语,则"const T&"被读作"以引用形式存在的T类型的常量对象".我更喜欢像英文散文一样阅读它,但我当然可以通过编译器的方式来理解它.
没有人回答组织或编码标准问题,但我强烈怀疑大多数组织不会强制要求一个,尽管他们可能会努力保持一致性.
我知道从右到左阅读声明的经验法则,我很清楚我知道发生了什么,直到一位同事告诉我:
const MyStructure** ppMyStruct;
Run Code Online (Sandbox Code Playgroud)
表示"ppMyStruct是指向(可变)MyStructure的const指针 "(在C++中).
我本以为它意味着"ppMyStruct是一个指向const MyStructure指针的指针 ".我在C++规范中寻找答案,但显然我不是很擅长......
在C++中意味着什么,它在C中意味着什么?
我有以下代码:
string const& operator[] (size_t index) const { return elems[index]; }
Run Code Online (Sandbox Code Playgroud)
不应该是:
const string&
Run Code Online (Sandbox Code Playgroud)
?
我认为通用引用(T&&)应该采用任何类型的引用.但以下不起作用.
当我尝试在我正在编写的库中进行const-correct时,我遇到了这个问题.我是C++的新手,之前没见过这样的东西.
TEST.CPP:
enum Cv_qualifier {
constant,
non_const
};
template <Cv_qualifier Cv> class A;
template<>
class A<Cv_qualifier::constant> {
public:
template<Cv_qualifier Cv2>
void t(const A<Cv2>&& out) {}
};
template <>
class A<Cv_qualifier::non_const> {
public:
template<Cv_qualifier Cv2>
void t(const A<Cv2>&& out) {}
};
int main()
{
A<Cv_qualifier::non_const> a;
A<Cv_qualifier::constant> b;
a.t(b);
}
Run Code Online (Sandbox Code Playgroud)
错误(编译g++ test.cpp -std=c++11):
test.cpp: In function ‘int main()’:
test.cpp:24:10: error: cannot bind ‘A<(Cv_qualifier)0u>’ lvalue to ‘const A<(Cv_qualifier)0u>&&’
a.t(b);
^
test.cpp:17:10: note: initializing argument 1 of ‘void …Run Code Online (Sandbox Code Playgroud) argv 是指向字符的常量指针数组
char * const argv[] // 1
Run Code Online (Sandbox Code Playgroud)
argv 是指向字符的指针数组,这些字符是常量
const char * argv[] // 2
Run Code Online (Sandbox Code Playgroud)
有什么技巧可以记住第一条吗?
我正在使用c谜题,并遇到了这个问题.在这里,一个at printf语句指针增加一次,所以我认为它将指向随机数!但我不明白为什么25是输出?谁有人可以帮我理解?提前谢谢了;)
void main()
{
int const * p=5;
printf("%d",++(*p));
}
Run Code Online (Sandbox Code Playgroud)
答案:25