Существует действительно 2 основного использования константы в C++.
значения Константы
, Если значение в форме переменной, участника или параметра, который не будет (или не должен) быть измененными в течение его времени жизни необходимо отметить его константа. Это помогает предотвратить мутации на объекте. Например, в следующей функции я не должен изменяться, Студенческий экземпляр передал так, я отмечаю его константа
void PrintStudent(const Student& student) {
cout << student.GetName();
}
относительно того, почему Вы сделали бы это. Намного легче рассуждать об алгоритме, если Вы знаете, что базовые данные не могут измениться. "константа" помогает, но не гарантирует, что это будет достигнуто.
, Очевидно, печатая данные в суд не требует очень мысли :)
отмечание членского метода как константа
В предыдущем примере, я отметил Студента как константу, Но как C++ знал, что, называя GetName () метод на студенте не видоизменит объект? Ответ - то, что метод был отмечен как константа
class Student {
public:
string GetName() const { ... }
};
, отмечание метода "константа" делает 2 вещи. Прежде всего, это говорит C++, что этот метод не видоизменит мой объект. Вторая вещь состоит в том, что все членские переменные будут теперь рассматривать, как будто они были отмечены как константа. Это помогает, но не препятствует тому, чтобы Вы изменили экземпляр своего класса.
Это - чрезвычайно простой пример, но надо надеяться он поможет ответить на Ваши вопросы.
Для быстрой демонстрации вы можете клонировать или загрузить то, что я сделал здесь .
Клонируйте sbt-appengine-plugin с GitHub
cd mystuff
git clone git://github.com/Yasushi/sbt-appengine-plugin.git
cd sbt-appengine-plugin
sbt
Опубликуйте плагин локально, чтобы вы могли использовать его в своих проектах
publish-local
exit
Создайте каталог для нового проекта
cd ..
mkdir sbt-appengine-plugin-test
cd sbt-appengine-plugin-test
sbt
Сконфигурируйте новый проект
Project does not exist, create new project? (y/N/s) y
Name: sbt-appengine-plugin-test
Organization: com.example
Version [1.0]:
Scala version [2.7.7]: 2.8.0.Beta1
sbt version [0.7.3]:
exit
Сообщите sbt о плагине, который вы хотите использовать
mkdir project/build
mkdir project/plugins
nano project/build/project.scala
project.scala
import sbt._
class AppengineTestProject(info: ProjectInfo) extends AppengineProject(info)
nano project/plugins/plugins.scala
plugins.scala
import sbt._
class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
val a = "net.stbbs.yasushi" % "sbt-appengine-plugin" % "1.1-SNAPSHOT"
}
Добавьте очень простой сервлет
mkdir -p src/main/scala/com/example
nano -w src/main/scala/com/example/HelloWorld.scala
HelloWorld.scala
package com.example;
import javax.servlet.http.{HttpServlet, HttpServletRequest, HttpServletResponse}
class HelloWorld extends HttpServlet {
override def doGet(request: HttpServletRequest, response: HttpServletResponse$
response.setContentType("text/plain")
response.getWriter.println("Hello, world")
}
}
Добавьте еще несколько файлов конфигурации
mkdir -p src/main/webapp/WEB-INF
nano -w src/main/WEB-INF/web.xml
web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xm$
version="2.5">
<display-name>sbt-appengine-plugin usage example</display-name>
<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>com.example.HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloworld</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
nano -w src/main/WEB-INF/appengine-web.xml
appengine-web.xml
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<!-- Replace this with your application id from http://appengine.google.com -$
<application>hello-world</application>
<version>1</version>
</appengine-web-app>
И, наконец, запустите sbt и запустите проект
sbt
update
dev-appserver-start
Укажите в браузере http: // localhost: 8080 / , и вы должны увидеть Hello, world
dev-appserver-stop
Чтобы следить за изменениями в исходных файлах, я немного поэкспериментировал с ~ prepare-webapp после запуска сервера, но у меня не получилось заставить его работать должным образом.
Вот sbt-appengine-plugin на Github, над которым я пытаюсь приступить к работе прямо сейчас. Я буду публиковать сообщения о прогрессе.
Здесь вы найдете пример автора плагина: http://gist.github.com/377611
Особенно в конфигурации плагинов настройка 1.1-SNAPSHOT (упомянутая выше) или 2.1-SNAPSHOT (упомянутая в README sbt-apppengine-plugin) не работала Работа.
Пример показывает:
import sbt._
class Plugins(info: ProjectInfo) extends PluginDefinition(info) {
val appenginePlugin = "net.stbbs.yasushi" % "sbt-appengine-plugin" % "2.0" from "http://github.com/downloads/Yasushi/sbt-appengine-plugin/sbt-appengine-plugin-2.0.jar"
}
И это сработало для меня.